diff --git a/prisma/migrations/20240523235040_sheltered_pets/migration.sql b/prisma/migrations/20240523235040_sheltered_pets/migration.sql new file mode 100644 index 0000000..8c45f80 --- /dev/null +++ b/prisma/migrations/20240523235040_sheltered_pets/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "shelters" ADD COLUMN "pet_capacity" INTEGER, +ADD COLUMN "sheltered_pets" INTEGER; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 69d2506..9f17354 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -104,6 +104,8 @@ model Shelter { petFriendly Boolean? @map("pet_friendly") shelteredPeople Int? @map("sheltered_people") capacity Int? + shelteredPets Int? @map("sheltered_pets") + petCapacity Int? @map("pet_capacity") contact String? prioritySum Int @default(value: 0) @map("priority_sum") latitude Float? diff --git a/src/shelter/shelter.service.ts b/src/shelter/shelter.service.ts index f79ac36..b862e30 100644 --- a/src/shelter/shelter.service.ts +++ b/src/shelter/shelter.service.ts @@ -81,6 +81,8 @@ export class ShelterService implements OnModuleInit { pix: true, shelteredPeople: true, capacity: true, + shelteredPets: true, + petCapacity: true, contact: shouldShowContact, petFriendly: true, prioritySum: true, @@ -155,8 +157,10 @@ export class ShelterService implements OnModuleInit { streetNumber: true, zipCode: true, capacity: true, + petCapacity: true, petFriendly: true, shelteredPeople: true, + shelteredPets: true, prioritySum: true, verified: true, latitude: true, diff --git a/src/shelter/types/types.ts b/src/shelter/types/types.ts index 0bdee09..959ccdb 100644 --- a/src/shelter/types/types.ts +++ b/src/shelter/types/types.ts @@ -8,6 +8,22 @@ export interface DefaultSupplyProps { supply: string; } +const petFriendlyRefinement = function(obj, ctx) { + if(!obj.petFriendly) { + if(obj.petCapacity) ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Shelter is not pet friendly', + path: ['petCapacity'] + }); + + if(obj.shelteredPets) ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Shelter is not pet friendly', + path: ['shelteredPets'] + }); + } +}; + const ShelterSchema = z.object({ id: z.string(), name: z.string().transform(capitalize), @@ -20,9 +36,11 @@ const ShelterSchema = z.object({ zipCode: z.string().nullable().optional(), petFriendly: z.boolean().nullable().optional(), shelteredPeople: z.number().min(0).nullable().optional(), + shelteredPets: z.number().min(0).nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), capacity: z.number().min(0).nullable().optional(), + petCapacity: z.number().min(0).nullable().optional(), contact: z.string().nullable().optional(), verified: z.boolean(), createdAt: z.string(), @@ -34,12 +52,15 @@ const CreateShelterSchema = ShelterSchema.omit({ createdAt: true, updatedAt: true, verified: true, -}); +}).superRefine(petFriendlyRefinement); const UpdateShelterSchema = ShelterSchema.pick({ petFriendly: true, shelteredPeople: true, -}).partial(); + petCapacity: true, + shelteredPets: true +}).partial() + .superRefine(petFriendlyRefinement); const FullUpdateShelterSchema = ShelterSchema.omit({ id: true, @@ -47,7 +68,8 @@ const FullUpdateShelterSchema = ShelterSchema.omit({ updatedAt: true, }) .partial() - .transform((args) => removeEmptyStrings(args)); + .transform((args) => removeEmptyStrings(args)) + .superRefine(petFriendlyRefinement); export { ShelterSchema,