From c93d8d436cbc13bd2796c89ba1296b1b9036c6d5 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 19:48:45 -0300 Subject: [PATCH 01/25] update prisma --- server/package.json | 4 +-- server/yarn.lock | 66 ++++++++++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/server/package.json b/server/package.json index e232bbb..b19e393 100644 --- a/server/package.json +++ b/server/package.json @@ -20,14 +20,14 @@ "eslint-plugin-import": "^2.25.2", "eslint-plugin-n": "^15.0.0", "eslint-plugin-promise": "^6.0.0", - "prisma": "^5.2.0", + "prisma": "^5.18.0", "tsx": "^4.7.0", "typescript": "*", "vitest": "^0.28.5", "zod": "^3.20.6" }, "dependencies": { - "@prisma/client": "^5.2.0", + "@prisma/client": "^5.10.2", "@types/cors": "^2.8.13", "bcrypt": "^5.1.0", "bcryptjs": "^2.4.3", diff --git a/server/yarn.lock b/server/yarn.lock index 5f4bcc1..ad0717e 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -297,22 +297,46 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@prisma/client@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.2.0.tgz#cbfdd440614b38736563a7999f39922fcde0ed50" - integrity sha512-AiTjJwR4J5Rh6Z/9ZKrBBLel3/5DzUNntMohOy7yObVnVoTNVFi2kvpLZlFuKO50d7yDspOtW6XBpiAd0BVXbQ== - dependencies: - "@prisma/engines-version" "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f" - -"@prisma/engines-version@5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f": - version "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f.tgz#11366e7ff031c908debf4983248d40046016de37" - integrity sha512-jsnKT5JIDIE01lAeCj2ghY9IwxkedhKNvxQeoyLs6dr4ZXynetD0vTy7u6wMJt8vVPv8I5DPy/I4CFaoXAgbtg== - -"@prisma/engines@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.2.0.tgz#e5dff48eb324c8137393933292d44ea5c3bc2ce7" - integrity sha512-dT7FOLUCdZmq+AunLqB1Iz+ZH/IIS1Fz2THmKZQ6aFONrQD/BQ5ecJ7g2wGS2OgyUFf4OaLam6/bxmgdOBDqig== +"@prisma/client@^5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.10.2.tgz#e087b40a4de8e3171eb9cbf0a873465cd2068e17" + integrity sha512-ef49hzB2yJZCvM5gFHMxSFL9KYrIP9udpT5rYo0CsHD4P9IKj473MbhU1gjKKftiwWBTIyrt9jukprzZXazyag== + +"@prisma/debug@5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.18.0.tgz#527799e044d2903a35945e61ac2d8916e4b61ead" + integrity sha512-f+ZvpTLidSo3LMJxQPVgAxdAjzv5OpzAo/eF8qZqbwvgi2F5cTOI9XCpdRzJYA0iGfajjwjOKKrVq64vkxEfUw== + +"@prisma/engines-version@5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169": + version "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169.tgz#203426ebf4ec4e1acce7da4a59ec8f0df92b29e7" + integrity sha512-a/+LpJj8vYU3nmtkg+N3X51ddbt35yYrRe8wqHTJtYQt7l1f8kjIBcCs6sHJvodW/EK5XGvboOiwm47fmNrbgg== + +"@prisma/engines@5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.18.0.tgz#26ea46e26498be622407cf95663d7fb4c39c895b" + integrity sha512-ofmpGLeJ2q2P0wa/XaEgTnX/IsLnvSp/gZts0zjgLNdBhfuj2lowOOPmDcfKljLQUXMvAek3lw5T01kHmCG8rg== + dependencies: + "@prisma/debug" "5.18.0" + "@prisma/engines-version" "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169" + "@prisma/fetch-engine" "5.18.0" + "@prisma/get-platform" "5.18.0" + +"@prisma/fetch-engine@5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.18.0.tgz#5b343e2b36b27e2713901ddd032ddd6932b3d55f" + integrity sha512-I/3u0x2n31rGaAuBRx2YK4eB7R/1zCuayo2DGwSpGyrJWsZesrV7QVw7ND0/Suxeo/vLkJ5OwuBqHoCxvTHpOg== + dependencies: + "@prisma/debug" "5.18.0" + "@prisma/engines-version" "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169" + "@prisma/get-platform" "5.18.0" + +"@prisma/get-platform@5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.18.0.tgz#0dc4c82fe9a4971f4519a57cb2dd69d8e0df4b71" + integrity sha512-Tk+m7+uhqcKDgnMnFN0lRiH7Ewea0OEsZZs9pqXa7i3+7svS3FSCqDBCaM9x5fmhhkufiG0BtunJVDka+46DlA== + dependencies: + "@prisma/debug" "5.18.0" "@types/bcryptjs@^2.4.2": version "2.4.2" @@ -2333,12 +2357,12 @@ pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -prisma@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.2.0.tgz#a302dc2635cdec1d22d552ece837fb29a03563b9" - integrity sha512-FfFlpjVCkZwrqxDnP4smlNYSH1so+CbfjgdpioFzGGqlQAEm6VHAYSzV7jJgC3ebtY9dNOhDMS2+4/1DDSM7bQ== +prisma@^5.18.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.18.0.tgz#5ef69c802a075b7596231ea57003496873610b9e" + integrity sha512-+TrSIxZsh64OPOmaSgVPH7ALL9dfU0jceYaMJXsNrTkFHO7/3RANi5K2ZiPB1De9+KDxCWn7jvRq8y8pvk+o9g== dependencies: - "@prisma/engines" "5.2.0" + "@prisma/engines" "5.18.0" proxy-addr@~2.0.7: version "2.0.7" From 36ec7324bd450896ac98a05e5eae7934e0aae495 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 19:52:20 -0300 Subject: [PATCH 02/25] refactor: change production schema --- .../migration.sql | 8 ----- .../migration.sql | 31 ------------------- .../migration.sql | 9 ++++-- .../migration.sql | 13 ++++++++ server/prisma/schema.prisma | 4 +-- 5 files changed, 21 insertions(+), 44 deletions(-) delete mode 100644 server/prisma/migrations/20240223012725_create_name_column/migration.sql delete mode 100644 server/prisma/migrations/20240223013156_change_gender_type/migration.sql rename server/prisma/migrations/{20230612165801_create_animal_gender_table => 20240224155437_create_gender_table}/migration.sql (68%) create mode 100644 server/prisma/migrations/20240224155522_create_production_control/migration.sql diff --git a/server/prisma/migrations/20240223012725_create_name_column/migration.sql b/server/prisma/migrations/20240223012725_create_name_column/migration.sql deleted file mode 100644 index 3d280cf..0000000 --- a/server/prisma/migrations/20240223012725_create_name_column/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - Added the required column `name` to the `genders` table without a default value. This is not possible if the table is not empty. - -*/ --- AlterTable -ALTER TABLE "genders" ADD COLUMN "name" TEXT NOT NULL; diff --git a/server/prisma/migrations/20240223013156_change_gender_type/migration.sql b/server/prisma/migrations/20240223013156_change_gender_type/migration.sql deleted file mode 100644 index 67f2231..0000000 --- a/server/prisma/migrations/20240223013156_change_gender_type/migration.sql +++ /dev/null @@ -1,31 +0,0 @@ -/* - Warnings: - - - You are about to alter the column `gender` on the `animals` table. The data in that column could be lost. The data in that column will be cast from `Decimal(65,30)` to `Integer`. - - The primary key for the `genders` table will be changed. If it partially fails, the table could be left without primary key constraint. - - You are about to drop the column `name` on the `genders` table. All the data in the column will be lost. - - You are about to alter the column `id` on the `genders` table. The data in that column could be lost. The data in that column will be cast from `Decimal(65,30)` to `Integer`. - - A unique constraint covering the columns `[type]` on the table `genders` will be added. If there are existing duplicate values, this will fail. - -*/ --- DropForeignKey -ALTER TABLE "animals" DROP CONSTRAINT "animals_gender_fkey"; - --- AlterTable -ALTER TABLE "animals" ALTER COLUMN "gender" SET DATA TYPE INTEGER; - --- AlterTable -CREATE SEQUENCE genders_id_seq; -ALTER TABLE "genders" DROP CONSTRAINT "genders_pkey", -DROP COLUMN "name", -ALTER COLUMN "id" SET DEFAULT nextval('genders_id_seq'), -ALTER COLUMN "id" SET DATA TYPE SERIAL, -ALTER COLUMN "type" SET DATA TYPE TEXT, -ADD CONSTRAINT "genders_pkey" PRIMARY KEY ("id"); -ALTER SEQUENCE genders_id_seq OWNED BY "genders"."id"; - --- CreateIndex -CREATE UNIQUE INDEX "genders_type_key" ON "genders"("type"); - --- AddForeignKey -ALTER TABLE "animals" ADD CONSTRAINT "animals_gender_fkey" FOREIGN KEY ("gender") REFERENCES "genders"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/server/prisma/migrations/20230612165801_create_animal_gender_table/migration.sql b/server/prisma/migrations/20240224155437_create_gender_table/migration.sql similarity index 68% rename from server/prisma/migrations/20230612165801_create_animal_gender_table/migration.sql rename to server/prisma/migrations/20240224155437_create_gender_table/migration.sql index 13c29a7..1870779 100644 --- a/server/prisma/migrations/20230612165801_create_animal_gender_table/migration.sql +++ b/server/prisma/migrations/20240224155437_create_gender_table/migration.sql @@ -5,15 +5,18 @@ */ -- AlterTable -ALTER TABLE "animals" ADD COLUMN "gender" DECIMAL(65,30) NOT NULL; +ALTER TABLE "animals" ADD COLUMN "gender" INTEGER NOT NULL; -- CreateTable CREATE TABLE "genders" ( - "id" DECIMAL(65,30) NOT NULL, - "type" DECIMAL(65,30) NOT NULL, + "id" SERIAL NOT NULL, + "type" TEXT NOT NULL, CONSTRAINT "genders_pkey" PRIMARY KEY ("id") ); +-- CreateIndex +CREATE UNIQUE INDEX "genders_type_key" ON "genders"("type"); + -- AddForeignKey ALTER TABLE "animals" ADD CONSTRAINT "animals_gender_fkey" FOREIGN KEY ("gender") REFERENCES "genders"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/server/prisma/migrations/20240224155522_create_production_control/migration.sql b/server/prisma/migrations/20240224155522_create_production_control/migration.sql new file mode 100644 index 0000000..73b7e7d --- /dev/null +++ b/server/prisma/migrations/20240224155522_create_production_control/migration.sql @@ -0,0 +1,13 @@ +-- CreateTable +CREATE TABLE "animal_productions" ( + "id" TEXT NOT NULL, + "animal_id" TEXT NOT NULL, + "date" TIMESTAMP(3) NOT NULL, + "goal" TEXT NOT NULL, + "price" DECIMAL(65,30) NOT NULL, + + CONSTRAINT "animal_productions_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "animal_productions" ADD CONSTRAINT "animal_productions_animal_id_fkey" FOREIGN KEY ("animal_id") REFERENCES "animals"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma index 0e24e2e..fa3b580 100644 --- a/server/prisma/schema.prisma +++ b/server/prisma/schema.prisma @@ -35,7 +35,7 @@ model Animal { owner User @relation(fields: [ownerId], references: [id]) genderId Gender @relation(fields: [gender], references: [id]) - AnimalProduction AnimalProduction[] + productionControl ProductionControl[] @@map("animals") } @@ -49,7 +49,7 @@ model Gender { @@map("genders") } -model AnimalProduction { +model ProductionControl { id String @id @default(uuid()) animalId String @map("animal_id") date DateTime From c47a534a36b68ed2469aa2ebf99361e477522ff1 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 20:01:28 -0300 Subject: [PATCH 03/25] feat: create prisma production controll mapper --- .../mappers/PrismaProductionControlMappers.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 server/src/database/mappers/PrismaProductionControlMappers.ts diff --git a/server/src/database/mappers/PrismaProductionControlMappers.ts b/server/src/database/mappers/PrismaProductionControlMappers.ts new file mode 100644 index 0000000..38db704 --- /dev/null +++ b/server/src/database/mappers/PrismaProductionControlMappers.ts @@ -0,0 +1,23 @@ +import { ProductionControlProps } from "../../dtos/AnimalsDTO"; + +export class PrismaProductionControl { + static toPrisma(data: ProductionControlProps) { + return { + id: data.id, + animalId: data.animalId, + date: data.date, + goal: data.goal, + price: data.price, + }; + } + + static toDomain(raw: any) { + return { + id: raw.id, + animalId: raw.animalId, + date: new Date(raw.date), + goal: raw.goal, + price: Number(raw.price), + }; + } +} \ No newline at end of file From e4e23bfb9989bcc37cdce24aa0b97f0818dcd990 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 20:02:04 -0300 Subject: [PATCH 04/25] feat: create prisma production controll repository --- .../PrismaProductionControlRepository.ts | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 server/src/database/prisma/PrismaProductionControlRepository.ts diff --git a/server/src/database/prisma/PrismaProductionControlRepository.ts b/server/src/database/prisma/PrismaProductionControlRepository.ts new file mode 100644 index 0000000..bc759db --- /dev/null +++ b/server/src/database/prisma/PrismaProductionControlRepository.ts @@ -0,0 +1,67 @@ +import { PrismaClient } from "@prisma/client"; +import { ProductionControlRepository } from "../../repositories/ProductionControlRepository"; +import { ProductionControlProps } from "../../dtos/AnimalsDTO"; +import { PrismaProductionControl } from "../mappers/PrismaProductionControlMappers"; + +export class PrismaProductionControlRepository implements ProductionControlRepository { + constructor ( + private prisma: PrismaClient, + ) {} + + async create(props: ProductionControlProps): Promise { + const raw = PrismaProductionControl.toPrisma(props); + + await this.prisma.productionControl.create({ + data: raw + }); + } + + async findByAnimalId(id: string): Promise { + const animalExists = await this.prisma.productionControl.findFirst({ + where: { + animalId: id, + } + }); + + if(!animalExists) { + return null; + } + + return PrismaProductionControl.toDomain(animalExists); + } + + async findMany(ownerId: string): Promise { + const animals = await this.prisma.productionControl.findMany({ + where: { + animal: { + ownerId, + } + } + }); + + return animals.map(PrismaProductionControl.toDomain); + } + + async save(props: ProductionControlProps): Promise { + const raw = PrismaProductionControl.toPrisma(props); + + await this.prisma.productionControl.update({ + where: { + id: raw.id, + }, + data: raw, + }); + + return; + } + + async delete(id: string): Promise { + await this.prisma.productionControl.delete({ + where: { + id, + } + }); + + return; + } +} \ No newline at end of file From 29c2098eb7fb7d4c1cc6f25696c277f4763111a6 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 20:02:39 -0300 Subject: [PATCH 05/25] feat: create production control dto --- server/src/dtos/AnimalsDTO.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 server/src/dtos/AnimalsDTO.ts diff --git a/server/src/dtos/AnimalsDTO.ts b/server/src/dtos/AnimalsDTO.ts new file mode 100644 index 0000000..c6287cb --- /dev/null +++ b/server/src/dtos/AnimalsDTO.ts @@ -0,0 +1,7 @@ +export interface ProductionControlProps { + id: string; + animalId: string; + date: Date; + goal: string; + price: number; +} \ No newline at end of file From cec9e1be78ae4b403b53a9a4e08b7bfaf202f9db Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 21 Aug 2024 20:03:23 -0300 Subject: [PATCH 06/25] feat: create production control abstract repository --- server/src/repositories/ProductionControlRepository.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 server/src/repositories/ProductionControlRepository.ts diff --git a/server/src/repositories/ProductionControlRepository.ts b/server/src/repositories/ProductionControlRepository.ts new file mode 100644 index 0000000..b4c2ff2 --- /dev/null +++ b/server/src/repositories/ProductionControlRepository.ts @@ -0,0 +1,9 @@ +import { ProductionControlProps } from "../dtos/AnimalsDTO"; + +export abstract class ProductionControlRepository { + abstract create(props: ProductionControlProps): Promise; + abstract findByAnimalId(id: string): Promise; + abstract findMany(ownerId: string): Promise; + abstract save(props: ProductionControlProps): Promise; + abstract delete(id: string): Promise; +} \ No newline at end of file From 7deee21d892b330c8ad1841bc095dfe6ec42e908 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Thu, 22 Aug 2024 22:57:46 -0300 Subject: [PATCH 07/25] feat: export prisma production repository --- server/src/database/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/database/index.ts b/server/src/database/index.ts index 02f8cc5..c355d02 100644 --- a/server/src/database/index.ts +++ b/server/src/database/index.ts @@ -1,9 +1,15 @@ import { PrismaClient } from "@prisma/client"; import { PrismaAnimalsRepository } from "./prisma/PrismaAnimalsRepository"; import { PrismaUsersRepository } from "./prisma/PrismaUsersRepository"; +import { PrismaProductionControlRepository } from "./prisma/PrismaProductionControlRepository"; const prisma = new PrismaClient(); const prismaAnimalsRepository = new PrismaAnimalsRepository(prisma); const prismaUsersRepository = new PrismaUsersRepository(prisma); +const prismaProductionControl = new PrismaProductionControlRepository(prisma); -export { prismaAnimalsRepository, prismaUsersRepository }; \ No newline at end of file +export { + prismaAnimalsRepository, + prismaUsersRepository, + prismaProductionControl +}; \ No newline at end of file From edf9b594e7912d83a47f1e65963b961dc83ea07f Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Thu, 22 Aug 2024 22:58:32 -0300 Subject: [PATCH 08/25] feat: create production routes --- server/src/routes/index.ts | 2 ++ server/src/routes/productionControlRoutes.ts | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 server/src/routes/productionControlRoutes.ts diff --git a/server/src/routes/index.ts b/server/src/routes/index.ts index 20ba9c6..d32a64c 100644 --- a/server/src/routes/index.ts +++ b/server/src/routes/index.ts @@ -2,11 +2,13 @@ import { Router } from "express"; import { animalsRoutes } from "./animalsRoutes"; import { usersRoutes } from "./usersRoutes"; import { authRoutes } from "./authRoutes"; +import { productionControlRoutes } from "./productionControlRoutes"; const routes = Router(); routes.use("/users", usersRoutes); routes.use("/animals", animalsRoutes); routes.use("/auth", authRoutes); +routes.use("/production", productionControlRoutes); export { routes }; \ No newline at end of file diff --git a/server/src/routes/productionControlRoutes.ts b/server/src/routes/productionControlRoutes.ts new file mode 100644 index 0000000..92eb873 --- /dev/null +++ b/server/src/routes/productionControlRoutes.ts @@ -0,0 +1,11 @@ +import { Router } from "express"; +import { createProductionControlController } from "../controllers/ProductionControl"; +import { authorizate } from "../middlewares"; + +const routes = Router(); + +routes.post("/", authorizate.verify, (request, response) => { + return createProductionControlController.handle(request, response); +}); + +export { routes as productionControlRoutes }; \ No newline at end of file From cebc77c9011c9c420abb53b5fc5ccb3118dab711 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Thu, 22 Aug 2024 22:59:04 -0300 Subject: [PATCH 09/25] feat: create production controller --- .../createProductionControlController.ts | 30 +++++++++++++++++++ .../controllers/ProductionControl/index.ts | 6 ++++ 2 files changed, 36 insertions(+) create mode 100644 server/src/controllers/ProductionControl/createProductionControlController.ts create mode 100644 server/src/controllers/ProductionControl/index.ts diff --git a/server/src/controllers/ProductionControl/createProductionControlController.ts b/server/src/controllers/ProductionControl/createProductionControlController.ts new file mode 100644 index 0000000..737ef93 --- /dev/null +++ b/server/src/controllers/ProductionControl/createProductionControlController.ts @@ -0,0 +1,30 @@ +import { Request, Response } from "express"; +import { z } from "zod"; +import { CreateProductionControll } from "../../services/ProductionControl/createProductionControll"; +import { ProductionViewModel } from "../../views/ProductionViewModel"; + +export class CreateProductionControlController { + constructor ( + private createProduction: CreateProductionControll, + ) {} + + async handle(request: Request, response: Response) { + const CreateAnimalProps = z.object({ + animalId: z.string(), + date: z.string(), + goal: z.string(), + price: z.number(), + }); + + const { animalId, date, goal, price } = CreateAnimalProps.parse(request.body); + + const production = await this.createProduction.execute({ + animalId, + date: new Date(date), + goal, + price, + }); + + return response.status(201).json(ProductionViewModel.toHTTP(production)); + } +} \ No newline at end of file diff --git a/server/src/controllers/ProductionControl/index.ts b/server/src/controllers/ProductionControl/index.ts new file mode 100644 index 0000000..fdfc836 --- /dev/null +++ b/server/src/controllers/ProductionControl/index.ts @@ -0,0 +1,6 @@ +import { createProductionControl } from "../../services/ProductionControl"; +import { CreateProductionControlController } from "./createProductionControlController"; + +const createProductionControlController = new CreateProductionControlController(createProductionControl); + +export { createProductionControlController }; \ No newline at end of file From 785257e0828ccca133c34bf3d493802d178cbfc4 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Thu, 22 Aug 2024 22:59:28 -0300 Subject: [PATCH 10/25] feat: create production entity --- server/src/entities/ProductionControl.ts | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 server/src/entities/ProductionControl.ts diff --git a/server/src/entities/ProductionControl.ts b/server/src/entities/ProductionControl.ts new file mode 100644 index 0000000..552b2fb --- /dev/null +++ b/server/src/entities/ProductionControl.ts @@ -0,0 +1,38 @@ +import { randomUUID } from "crypto"; + +interface ProductionControlProps { + animalId: string; + date: Date; + goal: string; + price: number; +} + +export default class ProductionControl { + private _id: string; + private props: ProductionControlProps; + + constructor(props: ProductionControlProps, id?: string) { + this.props = props; + this._id = id ?? randomUUID(); + } + + public get id(): string { + return this._id; + } + + public set animalId(value: string) { + this.props.animalId = value; + } + + public get date() { + return this.props.date; + } + + public get goal() { + return this.props.goal; + } + + public get price() { + return this.props.price; + } +} \ No newline at end of file From 1e0042b79d348daeff7a19f92f590726de10880a Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Thu, 22 Aug 2024 22:59:45 -0300 Subject: [PATCH 11/25] feat: create production view --- server/src/views/ProductionViewModel.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 server/src/views/ProductionViewModel.ts diff --git a/server/src/views/ProductionViewModel.ts b/server/src/views/ProductionViewModel.ts new file mode 100644 index 0000000..b88bc9b --- /dev/null +++ b/server/src/views/ProductionViewModel.ts @@ -0,0 +1,13 @@ +import ProductionControl from "../entities/ProductionControl"; + +export class ProductionViewModel { + public static toHTTP(production: ProductionControl) { + return { + id: production.id, + identification: production.animalId, + fatherId: production.date, + motherId: production.goal, + birthDate: production.price, + }; + } +} \ No newline at end of file From e3de0c3af230ebb2428cdd2d1c3722cf5e4c665a Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 00:22:36 -0300 Subject: [PATCH 12/25] fix: change animalId --- server/src/entities/ProductionControl.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/entities/ProductionControl.ts b/server/src/entities/ProductionControl.ts index 552b2fb..b1e3326 100644 --- a/server/src/entities/ProductionControl.ts +++ b/server/src/entities/ProductionControl.ts @@ -20,8 +20,8 @@ export default class ProductionControl { return this._id; } - public set animalId(value: string) { - this.props.animalId = value; + public get animalId() { + return this.props.animalId; } public get date() { From 7001abc2502e338c2d4aca025366f73830949504 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 00:23:14 -0300 Subject: [PATCH 13/25] feat: create production create --- .../createProductionControll.ts | 30 +++++++++++++++++++ .../src/services/ProductionControl/index.ts | 8 +++++ 2 files changed, 38 insertions(+) create mode 100644 server/src/services/ProductionControl/createProductionControll.ts create mode 100644 server/src/services/ProductionControl/index.ts diff --git a/server/src/services/ProductionControl/createProductionControll.ts b/server/src/services/ProductionControl/createProductionControll.ts new file mode 100644 index 0000000..4b2165b --- /dev/null +++ b/server/src/services/ProductionControl/createProductionControll.ts @@ -0,0 +1,30 @@ +import ProductionControl from "../../entities/ProductionControl"; +import AppError from "../../error/AppError"; +import { ProductionControlRepository } from "../../repositories/ProductionControlRepository"; + +interface productionControllRequest { + animalId: string; + date: Date; + goal: string; + price: number; +} + +export class CreateProductionControll { + constructor ( + private productionControlRepository: ProductionControlRepository, + ) {} + + async execute(props: productionControllRequest) { + const animalExists = await this.productionControlRepository.findByAnimalId(props.animalId); + + if(animalExists) { + throw new AppError("Production already exists."); + } + + const production = new ProductionControl(props); + + await this.productionControlRepository.create(production); + + return production; + } +} \ No newline at end of file diff --git a/server/src/services/ProductionControl/index.ts b/server/src/services/ProductionControl/index.ts new file mode 100644 index 0000000..26bff0d --- /dev/null +++ b/server/src/services/ProductionControl/index.ts @@ -0,0 +1,8 @@ +import { prismaProductionControl } from "../../database"; +import { CreateProductionControll } from "./createProductionControll"; + +const productionControlRepository = prismaProductionControl; + +const createProductionControl = new CreateProductionControll(productionControlRepository); + +export { createProductionControl }; \ No newline at end of file From 4c5fe824b3b753773da6feb55e5ecd9882c8679c Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 13:50:03 -0300 Subject: [PATCH 14/25] feat: create production entity test --- server/src/entities/Production.spec.ts | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 server/src/entities/Production.spec.ts diff --git a/server/src/entities/Production.spec.ts b/server/src/entities/Production.spec.ts new file mode 100644 index 0000000..903ebf5 --- /dev/null +++ b/server/src/entities/Production.spec.ts @@ -0,0 +1,32 @@ +import { randomUUID } from 'crypto'; +import { describe, expect, it } from 'vitest'; +import ProductionControl from './ProductionControl'; + +describe("Production", () => { + it("Should be able to create a new production", () => { + const animal = new ProductionControl({ + animalId: randomUUID(), + date: new Date(), + goal: "Engorda", + price: 1250.00, + }); + + expect(animal).toBeTruthy(); + expect(animal).toHaveProperty("id"); + }); + + it("Should be able to create a instance to an existing production", () => { + const id = randomUUID(); + + const animal = new ProductionControl({ + animalId: randomUUID(), + date: new Date(), + goal: "Engorda", + price: 1250.00, + }, id); + + expect(animal).toBeTruthy(); + expect(animal).toHaveProperty("id"); + expect(animal.id).toBe(id); + }); +}); \ No newline at end of file From 5ebdfd665d1689347b323a06fcdf0edcc34c0f09 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 15:04:39 -0300 Subject: [PATCH 15/25] refactor: change production entity test --- server/src/entities/Production.spec.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/src/entities/Production.spec.ts b/server/src/entities/Production.spec.ts index 903ebf5..d9251bf 100644 --- a/server/src/entities/Production.spec.ts +++ b/server/src/entities/Production.spec.ts @@ -4,15 +4,21 @@ import ProductionControl from './ProductionControl'; describe("Production", () => { it("Should be able to create a new production", () => { - const animal = new ProductionControl({ + const raw = { animalId: randomUUID(), date: new Date(), goal: "Engorda", price: 1250.00, - }); + }; + + const animal = new ProductionControl(raw); expect(animal).toBeTruthy(); expect(animal).toHaveProperty("id"); + expect(animal).toContain({ + id: animal.id, + ...raw, + }); }); it("Should be able to create a instance to an existing production", () => { From 61aee96a62d2d046ff4223dadedaca9f1bd73649 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 15:06:26 -0300 Subject: [PATCH 16/25] refactor: change production entity name --- server/src/entities/Production.spec.ts | 6 +++--- .../src/entities/{ProductionControl.ts => Production.ts} | 8 ++++---- .../ProductionControl/createProductionControll.ts | 2 +- server/src/views/ProductionViewModel.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) rename server/src/entities/{ProductionControl.ts => Production.ts} (72%) diff --git a/server/src/entities/Production.spec.ts b/server/src/entities/Production.spec.ts index d9251bf..d16924b 100644 --- a/server/src/entities/Production.spec.ts +++ b/server/src/entities/Production.spec.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'crypto'; import { describe, expect, it } from 'vitest'; -import ProductionControl from './ProductionControl'; +import Production from './Production'; describe("Production", () => { it("Should be able to create a new production", () => { @@ -11,7 +11,7 @@ describe("Production", () => { price: 1250.00, }; - const animal = new ProductionControl(raw); + const animal = new Production(raw); expect(animal).toBeTruthy(); expect(animal).toHaveProperty("id"); @@ -24,7 +24,7 @@ describe("Production", () => { it("Should be able to create a instance to an existing production", () => { const id = randomUUID(); - const animal = new ProductionControl({ + const animal = new Production({ animalId: randomUUID(), date: new Date(), goal: "Engorda", diff --git a/server/src/entities/ProductionControl.ts b/server/src/entities/Production.ts similarity index 72% rename from server/src/entities/ProductionControl.ts rename to server/src/entities/Production.ts index b1e3326..f864afe 100644 --- a/server/src/entities/ProductionControl.ts +++ b/server/src/entities/Production.ts @@ -1,17 +1,17 @@ import { randomUUID } from "crypto"; -interface ProductionControlProps { +interface ProductionProps { animalId: string; date: Date; goal: string; price: number; } -export default class ProductionControl { +export default class Production { private _id: string; - private props: ProductionControlProps; + private props: ProductionProps; - constructor(props: ProductionControlProps, id?: string) { + constructor(props: ProductionProps, id?: string) { this.props = props; this._id = id ?? randomUUID(); } diff --git a/server/src/services/ProductionControl/createProductionControll.ts b/server/src/services/ProductionControl/createProductionControll.ts index 4b2165b..d144f37 100644 --- a/server/src/services/ProductionControl/createProductionControll.ts +++ b/server/src/services/ProductionControl/createProductionControll.ts @@ -1,4 +1,4 @@ -import ProductionControl from "../../entities/ProductionControl"; +import ProductionControl from "../../entities/Production"; import AppError from "../../error/AppError"; import { ProductionControlRepository } from "../../repositories/ProductionControlRepository"; diff --git a/server/src/views/ProductionViewModel.ts b/server/src/views/ProductionViewModel.ts index b88bc9b..86a4e96 100644 --- a/server/src/views/ProductionViewModel.ts +++ b/server/src/views/ProductionViewModel.ts @@ -1,4 +1,4 @@ -import ProductionControl from "../entities/ProductionControl"; +import ProductionControl from "../entities/Production"; export class ProductionViewModel { public static toHTTP(production: ProductionControl) { From c55bc6c027c90ae62fc540db11185b41a83678a5 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 15:08:40 -0300 Subject: [PATCH 17/25] refactor: change production repositories name --- .../database/prisma/PrismaProductionControlRepository.ts | 2 +- server/src/dtos/AnimalsDTO.ts | 2 +- server/src/repositories/ProductionControlRepository.ts | 9 --------- server/src/repositories/ProductionRepository.ts | 9 +++++++++ .../ProductionControl/createProductionControll.ts | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 server/src/repositories/ProductionControlRepository.ts create mode 100644 server/src/repositories/ProductionRepository.ts diff --git a/server/src/database/prisma/PrismaProductionControlRepository.ts b/server/src/database/prisma/PrismaProductionControlRepository.ts index bc759db..7c7df16 100644 --- a/server/src/database/prisma/PrismaProductionControlRepository.ts +++ b/server/src/database/prisma/PrismaProductionControlRepository.ts @@ -1,5 +1,5 @@ import { PrismaClient } from "@prisma/client"; -import { ProductionControlRepository } from "../../repositories/ProductionControlRepository"; +import { ProductionControlRepository } from "../../repositories/ProductionRepository"; import { ProductionControlProps } from "../../dtos/AnimalsDTO"; import { PrismaProductionControl } from "../mappers/PrismaProductionControlMappers"; diff --git a/server/src/dtos/AnimalsDTO.ts b/server/src/dtos/AnimalsDTO.ts index c6287cb..a19616f 100644 --- a/server/src/dtos/AnimalsDTO.ts +++ b/server/src/dtos/AnimalsDTO.ts @@ -1,4 +1,4 @@ -export interface ProductionControlProps { +export interface ProductionProps { id: string; animalId: string; date: Date; diff --git a/server/src/repositories/ProductionControlRepository.ts b/server/src/repositories/ProductionControlRepository.ts deleted file mode 100644 index b4c2ff2..0000000 --- a/server/src/repositories/ProductionControlRepository.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ProductionControlProps } from "../dtos/AnimalsDTO"; - -export abstract class ProductionControlRepository { - abstract create(props: ProductionControlProps): Promise; - abstract findByAnimalId(id: string): Promise; - abstract findMany(ownerId: string): Promise; - abstract save(props: ProductionControlProps): Promise; - abstract delete(id: string): Promise; -} \ No newline at end of file diff --git a/server/src/repositories/ProductionRepository.ts b/server/src/repositories/ProductionRepository.ts new file mode 100644 index 0000000..2563810 --- /dev/null +++ b/server/src/repositories/ProductionRepository.ts @@ -0,0 +1,9 @@ +import { ProductionProps } from "../dtos/AnimalsDTO"; + +export abstract class ProductionRepository { + abstract create(props: ProductionProps): Promise; + abstract findByAnimalId(id: string): Promise; + abstract findMany(ownerId: string): Promise; + abstract save(props: ProductionProps): Promise; + abstract delete(id: string): Promise; +} \ No newline at end of file diff --git a/server/src/services/ProductionControl/createProductionControll.ts b/server/src/services/ProductionControl/createProductionControll.ts index d144f37..872fa24 100644 --- a/server/src/services/ProductionControl/createProductionControll.ts +++ b/server/src/services/ProductionControl/createProductionControll.ts @@ -1,6 +1,6 @@ import ProductionControl from "../../entities/Production"; import AppError from "../../error/AppError"; -import { ProductionControlRepository } from "../../repositories/ProductionControlRepository"; +import { ProductionControlRepository } from "../../repositories/ProductionRepository"; interface productionControllRequest { animalId: string; From ce1e9cdbe4d6d75d0f6af6bf490d9854f550c6eb Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 15:17:28 -0300 Subject: [PATCH 18/25] refactor: change productionControl to production --- server/prisma/schema.prisma | 4 +- .../createProductionController.ts} | 6 +- server/src/controllers/Production/index.ts | 6 ++ .../controllers/ProductionControl/index.ts | 6 -- server/src/database/index.ts | 6 +- ...lMappers.ts => PrismaProductionMappers.ts} | 6 +- .../PrismaProductionControlRepository.ts | 67 ------------------- .../prisma/PrismaProductionRepository.ts | 67 +++++++++++++++++++ server/src/routes/index.ts | 4 +- server/src/routes/productionControlRoutes.ts | 11 --- server/src/routes/productionRoutes.ts | 11 +++ .../createProduction.ts} | 10 +-- server/src/services/Production/index.ts | 8 +++ .../src/services/ProductionControl/index.ts | 8 --- 14 files changed, 110 insertions(+), 110 deletions(-) rename server/src/controllers/{ProductionControl/createProductionControlController.ts => Production/createProductionController.ts} (76%) create mode 100644 server/src/controllers/Production/index.ts delete mode 100644 server/src/controllers/ProductionControl/index.ts rename server/src/database/mappers/{PrismaProductionControlMappers.ts => PrismaProductionMappers.ts} (68%) delete mode 100644 server/src/database/prisma/PrismaProductionControlRepository.ts create mode 100644 server/src/database/prisma/PrismaProductionRepository.ts delete mode 100644 server/src/routes/productionControlRoutes.ts create mode 100644 server/src/routes/productionRoutes.ts rename server/src/services/{ProductionControl/createProductionControll.ts => Production/createProduction.ts} (64%) create mode 100644 server/src/services/Production/index.ts delete mode 100644 server/src/services/ProductionControl/index.ts diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma index fa3b580..73b6dea 100644 --- a/server/prisma/schema.prisma +++ b/server/prisma/schema.prisma @@ -35,7 +35,7 @@ model Animal { owner User @relation(fields: [ownerId], references: [id]) genderId Gender @relation(fields: [gender], references: [id]) - productionControl ProductionControl[] + production Production[] @@map("animals") } @@ -49,7 +49,7 @@ model Gender { @@map("genders") } -model ProductionControl { +model Production { id String @id @default(uuid()) animalId String @map("animal_id") date DateTime diff --git a/server/src/controllers/ProductionControl/createProductionControlController.ts b/server/src/controllers/Production/createProductionController.ts similarity index 76% rename from server/src/controllers/ProductionControl/createProductionControlController.ts rename to server/src/controllers/Production/createProductionController.ts index 737ef93..54d438a 100644 --- a/server/src/controllers/ProductionControl/createProductionControlController.ts +++ b/server/src/controllers/Production/createProductionController.ts @@ -1,11 +1,11 @@ import { Request, Response } from "express"; import { z } from "zod"; -import { CreateProductionControll } from "../../services/ProductionControl/createProductionControll"; +import { CreateProduction } from "../../services/Production/createProduction"; import { ProductionViewModel } from "../../views/ProductionViewModel"; -export class CreateProductionControlController { +export class CreateProductionController { constructor ( - private createProduction: CreateProductionControll, + private createProduction: CreateProduction, ) {} async handle(request: Request, response: Response) { diff --git a/server/src/controllers/Production/index.ts b/server/src/controllers/Production/index.ts new file mode 100644 index 0000000..3f37115 --- /dev/null +++ b/server/src/controllers/Production/index.ts @@ -0,0 +1,6 @@ +import { createProduction } from "../../services/Production"; +import { CreateProductionController } from "./createProductionController"; + +const createProductionController = new CreateProductionController(createProduction); + +export { createProductionController }; \ No newline at end of file diff --git a/server/src/controllers/ProductionControl/index.ts b/server/src/controllers/ProductionControl/index.ts deleted file mode 100644 index fdfc836..0000000 --- a/server/src/controllers/ProductionControl/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createProductionControl } from "../../services/ProductionControl"; -import { CreateProductionControlController } from "./createProductionControlController"; - -const createProductionControlController = new CreateProductionControlController(createProductionControl); - -export { createProductionControlController }; \ No newline at end of file diff --git a/server/src/database/index.ts b/server/src/database/index.ts index c355d02..db71340 100644 --- a/server/src/database/index.ts +++ b/server/src/database/index.ts @@ -1,15 +1,15 @@ import { PrismaClient } from "@prisma/client"; import { PrismaAnimalsRepository } from "./prisma/PrismaAnimalsRepository"; import { PrismaUsersRepository } from "./prisma/PrismaUsersRepository"; -import { PrismaProductionControlRepository } from "./prisma/PrismaProductionControlRepository"; +import { PrismaProductionRepository } from "./prisma/PrismaProductionRepository"; const prisma = new PrismaClient(); const prismaAnimalsRepository = new PrismaAnimalsRepository(prisma); const prismaUsersRepository = new PrismaUsersRepository(prisma); -const prismaProductionControl = new PrismaProductionControlRepository(prisma); +const prismaProduction = new PrismaProductionRepository(prisma); export { prismaAnimalsRepository, prismaUsersRepository, - prismaProductionControl + prismaProduction }; \ No newline at end of file diff --git a/server/src/database/mappers/PrismaProductionControlMappers.ts b/server/src/database/mappers/PrismaProductionMappers.ts similarity index 68% rename from server/src/database/mappers/PrismaProductionControlMappers.ts rename to server/src/database/mappers/PrismaProductionMappers.ts index 38db704..43fb0cf 100644 --- a/server/src/database/mappers/PrismaProductionControlMappers.ts +++ b/server/src/database/mappers/PrismaProductionMappers.ts @@ -1,7 +1,7 @@ -import { ProductionControlProps } from "../../dtos/AnimalsDTO"; +import { ProductionProps } from "../../dtos/AnimalsDTO"; -export class PrismaProductionControl { - static toPrisma(data: ProductionControlProps) { +export class PrismaProduction { + static toPrisma(data: ProductionProps) { return { id: data.id, animalId: data.animalId, diff --git a/server/src/database/prisma/PrismaProductionControlRepository.ts b/server/src/database/prisma/PrismaProductionControlRepository.ts deleted file mode 100644 index 7c7df16..0000000 --- a/server/src/database/prisma/PrismaProductionControlRepository.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { PrismaClient } from "@prisma/client"; -import { ProductionControlRepository } from "../../repositories/ProductionRepository"; -import { ProductionControlProps } from "../../dtos/AnimalsDTO"; -import { PrismaProductionControl } from "../mappers/PrismaProductionControlMappers"; - -export class PrismaProductionControlRepository implements ProductionControlRepository { - constructor ( - private prisma: PrismaClient, - ) {} - - async create(props: ProductionControlProps): Promise { - const raw = PrismaProductionControl.toPrisma(props); - - await this.prisma.productionControl.create({ - data: raw - }); - } - - async findByAnimalId(id: string): Promise { - const animalExists = await this.prisma.productionControl.findFirst({ - where: { - animalId: id, - } - }); - - if(!animalExists) { - return null; - } - - return PrismaProductionControl.toDomain(animalExists); - } - - async findMany(ownerId: string): Promise { - const animals = await this.prisma.productionControl.findMany({ - where: { - animal: { - ownerId, - } - } - }); - - return animals.map(PrismaProductionControl.toDomain); - } - - async save(props: ProductionControlProps): Promise { - const raw = PrismaProductionControl.toPrisma(props); - - await this.prisma.productionControl.update({ - where: { - id: raw.id, - }, - data: raw, - }); - - return; - } - - async delete(id: string): Promise { - await this.prisma.productionControl.delete({ - where: { - id, - } - }); - - return; - } -} \ No newline at end of file diff --git a/server/src/database/prisma/PrismaProductionRepository.ts b/server/src/database/prisma/PrismaProductionRepository.ts new file mode 100644 index 0000000..1c0e8b5 --- /dev/null +++ b/server/src/database/prisma/PrismaProductionRepository.ts @@ -0,0 +1,67 @@ +import { PrismaClient } from "@prisma/client"; +import { ProductionRepository } from "../../repositories/ProductionRepository"; +import { ProductionProps } from "../../dtos/AnimalsDTO"; +import { PrismaProduction } from "../mappers/PrismaProductionMappers"; + +export class PrismaProductionRepository implements ProductionRepository { + constructor ( + private prisma: PrismaClient, + ) {} + + async create(props: ProductionProps): Promise { + const raw = PrismaProduction.toPrisma(props); + + await this.prisma.production.create({ + data: raw + }); + } + + async findByAnimalId(id: string): Promise { + const animalExists = await this.prisma.production.findFirst({ + where: { + animalId: id, + } + }); + + if(!animalExists) { + return null; + } + + return PrismaProduction.toDomain(animalExists); + } + + async findMany(ownerId: string): Promise { + const animals = await this.prisma.production.findMany({ + where: { + animal: { + ownerId, + } + } + }); + + return animals.map(PrismaProduction.toDomain); + } + + async save(props: ProductionProps): Promise { + const raw = PrismaProduction.toPrisma(props); + + await this.prisma.production.update({ + where: { + id: raw.id, + }, + data: raw, + }); + + return; + } + + async delete(id: string): Promise { + await this.prisma.production.delete({ + where: { + id, + } + }); + + return; + } +} \ No newline at end of file diff --git a/server/src/routes/index.ts b/server/src/routes/index.ts index d32a64c..47bb05b 100644 --- a/server/src/routes/index.ts +++ b/server/src/routes/index.ts @@ -2,13 +2,13 @@ import { Router } from "express"; import { animalsRoutes } from "./animalsRoutes"; import { usersRoutes } from "./usersRoutes"; import { authRoutes } from "./authRoutes"; -import { productionControlRoutes } from "./productionControlRoutes"; +import { productionRoutes } from "./productionRoutes"; const routes = Router(); routes.use("/users", usersRoutes); routes.use("/animals", animalsRoutes); routes.use("/auth", authRoutes); -routes.use("/production", productionControlRoutes); +routes.use("/production", productionRoutes); export { routes }; \ No newline at end of file diff --git a/server/src/routes/productionControlRoutes.ts b/server/src/routes/productionControlRoutes.ts deleted file mode 100644 index 92eb873..0000000 --- a/server/src/routes/productionControlRoutes.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Router } from "express"; -import { createProductionControlController } from "../controllers/ProductionControl"; -import { authorizate } from "../middlewares"; - -const routes = Router(); - -routes.post("/", authorizate.verify, (request, response) => { - return createProductionControlController.handle(request, response); -}); - -export { routes as productionControlRoutes }; \ No newline at end of file diff --git a/server/src/routes/productionRoutes.ts b/server/src/routes/productionRoutes.ts new file mode 100644 index 0000000..c123381 --- /dev/null +++ b/server/src/routes/productionRoutes.ts @@ -0,0 +1,11 @@ +import { Router } from "express"; +import { createProductionController } from "../controllers/Production"; +import { authorizate } from "../middlewares"; + +const routes = Router(); + +routes.post("/", authorizate.verify, (request, response) => { + return createProductionController.handle(request, response); +}); + +export { routes as productionRoutes }; \ No newline at end of file diff --git a/server/src/services/ProductionControl/createProductionControll.ts b/server/src/services/Production/createProduction.ts similarity index 64% rename from server/src/services/ProductionControl/createProductionControll.ts rename to server/src/services/Production/createProduction.ts index 872fa24..44484a8 100644 --- a/server/src/services/ProductionControl/createProductionControll.ts +++ b/server/src/services/Production/createProduction.ts @@ -1,20 +1,20 @@ import ProductionControl from "../../entities/Production"; import AppError from "../../error/AppError"; -import { ProductionControlRepository } from "../../repositories/ProductionRepository"; +import { ProductionRepository } from "../../repositories/ProductionRepository"; -interface productionControllRequest { +interface productionRequest { animalId: string; date: Date; goal: string; price: number; } -export class CreateProductionControll { +export class CreateProduction { constructor ( - private productionControlRepository: ProductionControlRepository, + private productionControlRepository: ProductionRepository, ) {} - async execute(props: productionControllRequest) { + async execute(props: productionRequest) { const animalExists = await this.productionControlRepository.findByAnimalId(props.animalId); if(animalExists) { diff --git a/server/src/services/Production/index.ts b/server/src/services/Production/index.ts new file mode 100644 index 0000000..ed891d0 --- /dev/null +++ b/server/src/services/Production/index.ts @@ -0,0 +1,8 @@ +import { prismaProduction } from "../../database"; +import { CreateProduction } from "./createProduction"; + +const productionRepository = prismaProduction; + +const createProduction = new CreateProduction(productionRepository); + +export { createProduction }; \ No newline at end of file diff --git a/server/src/services/ProductionControl/index.ts b/server/src/services/ProductionControl/index.ts deleted file mode 100644 index 26bff0d..0000000 --- a/server/src/services/ProductionControl/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { prismaProductionControl } from "../../database"; -import { CreateProductionControll } from "./createProductionControll"; - -const productionControlRepository = prismaProductionControl; - -const createProductionControl = new CreateProductionControll(productionControlRepository); - -export { createProductionControl }; \ No newline at end of file From e1d9a044ed67b61715e3a244ba24d495a750abde Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Sat, 24 Aug 2024 15:42:56 -0300 Subject: [PATCH 19/25] feat: add types root to tsconfig --- server/tsconfig.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/tsconfig.json b/server/tsconfig.json index 10aafb6..72a2e49 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -31,7 +31,9 @@ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + "typeRoots": [ + "./@types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ From 616f7b733ecb111a6ca5dad3a30501cd0e116fde Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:24:48 -0300 Subject: [PATCH 20/25] refactor: change production entity import --- server/src/views/ProductionViewModel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/views/ProductionViewModel.ts b/server/src/views/ProductionViewModel.ts index 86a4e96..05c03b1 100644 --- a/server/src/views/ProductionViewModel.ts +++ b/server/src/views/ProductionViewModel.ts @@ -1,7 +1,7 @@ -import ProductionControl from "../entities/Production"; +import Production from "../entities/Production"; export class ProductionViewModel { - public static toHTTP(production: ProductionControl) { + public static toHTTP(production: Production) { return { id: production.id, identification: production.animalId, From 7a52bc138388dcabaec40c030f9f66c4de2fc8a1 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:33:28 -0300 Subject: [PATCH 21/25] refactor: change production props --- server/src/dtos/AnimalsDTO.ts | 7 ------- server/src/repositories/ProductionRepository.ts | 10 +++++----- 2 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 server/src/dtos/AnimalsDTO.ts diff --git a/server/src/dtos/AnimalsDTO.ts b/server/src/dtos/AnimalsDTO.ts deleted file mode 100644 index a19616f..0000000 --- a/server/src/dtos/AnimalsDTO.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface ProductionProps { - id: string; - animalId: string; - date: Date; - goal: string; - price: number; -} \ No newline at end of file diff --git a/server/src/repositories/ProductionRepository.ts b/server/src/repositories/ProductionRepository.ts index 2563810..3a1bc9a 100644 --- a/server/src/repositories/ProductionRepository.ts +++ b/server/src/repositories/ProductionRepository.ts @@ -1,9 +1,9 @@ -import { ProductionProps } from "../dtos/AnimalsDTO"; +import Production from "../entities/Production"; export abstract class ProductionRepository { - abstract create(props: ProductionProps): Promise; - abstract findByAnimalId(id: string): Promise; - abstract findMany(ownerId: string): Promise; - abstract save(props: ProductionProps): Promise; + abstract create(props: Production): Promise; + abstract findByAnimalId(id: string): Promise; + abstract findMany(ownerId: string): Promise; + abstract save(props: Production): Promise; abstract delete(id: string): Promise; } \ No newline at end of file From df5e79a8431b2ef8d1b8c96df7bcdaf5cada286e Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:43:46 -0300 Subject: [PATCH 22/25] feat: create find many productions service --- .../src/services/Production/findManyProductions.ts | 13 +++++++++++++ server/src/services/Production/index.ts | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 server/src/services/Production/findManyProductions.ts diff --git a/server/src/services/Production/findManyProductions.ts b/server/src/services/Production/findManyProductions.ts new file mode 100644 index 0000000..d86fac9 --- /dev/null +++ b/server/src/services/Production/findManyProductions.ts @@ -0,0 +1,13 @@ +import { ProductionRepository } from "../../repositories/ProductionRepository"; + +export class FindManyProductions { + constructor( + private productionRepository: ProductionRepository + ) {} + + async execute(ownerId: string) { + const productions = await this.productionRepository.findMany(ownerId); + + return productions; + } +} \ No newline at end of file diff --git a/server/src/services/Production/index.ts b/server/src/services/Production/index.ts index ed891d0..ea2d30c 100644 --- a/server/src/services/Production/index.ts +++ b/server/src/services/Production/index.ts @@ -1,8 +1,10 @@ import { prismaProduction } from "../../database"; import { CreateProduction } from "./createProduction"; +import { FindManyProductions } from "./findManyProductions"; const productionRepository = prismaProduction; const createProduction = new CreateProduction(productionRepository); +const findManyProductions = new FindManyProductions(productionRepository); -export { createProduction }; \ No newline at end of file +export { createProduction, findManyProductions }; \ No newline at end of file From 93bef02574ef758c52d44d923640ad71d92e00b7 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:45:06 -0300 Subject: [PATCH 23/25] feat: create find many productions controller --- .../Production/findManyProductionsController.ts | 17 +++++++++++++++++ server/src/controllers/Production/index.ts | 6 ++++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 server/src/controllers/Production/findManyProductionsController.ts diff --git a/server/src/controllers/Production/findManyProductionsController.ts b/server/src/controllers/Production/findManyProductionsController.ts new file mode 100644 index 0000000..0e62ef9 --- /dev/null +++ b/server/src/controllers/Production/findManyProductionsController.ts @@ -0,0 +1,17 @@ +import { Request, Response } from "express"; +import { FindManyProductions } from "../../services/Production/findManyProductions"; +import { ProductionViewModel } from "../../views/ProductionViewModel"; + +export class FindManyProductionsController { + constructor( + private findManyProductions: FindManyProductions, + ) {} + + async handle(request: Request, response: Response) { + const { ownerId } = request.params; + + const productions = await this.findManyProductions.execute(ownerId); + + return response.json(productions.map((production) => ProductionViewModel.toHTTP(production))); + } +} \ No newline at end of file diff --git a/server/src/controllers/Production/index.ts b/server/src/controllers/Production/index.ts index 3f37115..efd15f4 100644 --- a/server/src/controllers/Production/index.ts +++ b/server/src/controllers/Production/index.ts @@ -1,6 +1,8 @@ -import { createProduction } from "../../services/Production"; +import { createProduction, findManyProductions } from "../../services/Production"; import { CreateProductionController } from "./createProductionController"; +import { FindManyProductionsController } from "./findManyProductionsController"; const createProductionController = new CreateProductionController(createProduction); +const findManyProductionsController = new FindManyProductionsController(findManyProductions); -export { createProductionController }; \ No newline at end of file +export { createProductionController, findManyProductionsController }; \ No newline at end of file From 357f1f8f893c32755c024eade4494cfd623930fb Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:45:46 -0300 Subject: [PATCH 24/25] feat: create find many productions route --- server/src/routes/productionRoutes.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/src/routes/productionRoutes.ts b/server/src/routes/productionRoutes.ts index c123381..374ac1c 100644 --- a/server/src/routes/productionRoutes.ts +++ b/server/src/routes/productionRoutes.ts @@ -1,5 +1,5 @@ import { Router } from "express"; -import { createProductionController } from "../controllers/Production"; +import { createProductionController, findManyProductionsController } from "../controllers/Production"; import { authorizate } from "../middlewares"; const routes = Router(); @@ -8,4 +8,8 @@ routes.post("/", authorizate.verify, (request, response) => { return createProductionController.handle(request, response); }); +routes.get("/owner/:ownerId", authorizate.verify, (request, response) => { + return findManyProductionsController.handle(request, response); +}); + export { routes as productionRoutes }; \ No newline at end of file From f1d86818efdd1bf48a347eab79f6b82fbeb89de8 Mon Sep 17 00:00:00 2001 From: Lucas Jantsch Guedes Date: Wed, 28 Aug 2024 22:46:51 -0300 Subject: [PATCH 25/25] feat: add misc to gitignore --- server/.gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/.gitignore b/server/.gitignore index 088ab30..97871f7 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -11,4 +11,7 @@ node_modules/ dist/ # logs -**/*.log \ No newline at end of file +**/*.log + +# misc +.vscode/ \ No newline at end of file