From cdfa62958fa0930b227282f9cf3e067d834cfbf7 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Fri, 9 Aug 2024 21:51:33 +0700 Subject: [PATCH] feat: agencies --- apps/backend/src/api/api.module.ts | 2 + .../src/api/routes/agencies.controller.ts | 15 ++++++ .../prisma/agencies/agencies.repository.ts | 19 +++++++ .../prisma/agencies/agencies.service.ts | 11 ++++ .../src/database/prisma/database.module.ts | 4 ++ .../src/database/prisma/schema.prisma | 54 +++++++++++++++++++ 6 files changed, 105 insertions(+) create mode 100644 apps/backend/src/api/routes/agencies.controller.ts create mode 100644 libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts create mode 100644 libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts diff --git a/apps/backend/src/api/api.module.ts b/apps/backend/src/api/api.module.ts index 9bd5b14c..be829065 100644 --- a/apps/backend/src/api/api.module.ts +++ b/apps/backend/src/api/api.module.ts @@ -26,6 +26,7 @@ import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; import { ExtractContentService } from '@gitroom/nestjs-libraries/openai/extract.content.service'; import { CodesService } from '@gitroom/nestjs-libraries/services/codes.service'; import { CopilotController } from '@gitroom/backend/api/routes/copilot.controller'; +import { AgenciesController } from '@gitroom/backend/api/routes/agencies.controller'; const authenticatedController = [ UsersController, @@ -40,6 +41,7 @@ const authenticatedController = [ MarketplaceController, MessagesController, CopilotController, + AgenciesController, ]; @Module({ imports: [ diff --git a/apps/backend/src/api/routes/agencies.controller.ts b/apps/backend/src/api/routes/agencies.controller.ts new file mode 100644 index 00000000..94ae5013 --- /dev/null +++ b/apps/backend/src/api/routes/agencies.controller.ts @@ -0,0 +1,15 @@ +import { Controller, Get } from '@nestjs/common'; +import { User } from '@prisma/client'; +import { ApiTags } from '@nestjs/swagger'; +import { AgenciesService } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.service'; +import { GetUserFromRequest } from '@gitroom/nestjs-libraries/user/user.from.request'; + +@ApiTags('Agencies') +@Controller('/agencies') +export class AgenciesController { + constructor(private _agenciesService: AgenciesService) {} + @Get('/') + async generateImage(@GetUserFromRequest() user: User) { + return this._agenciesService.getAgencyByUser(user); + } +} diff --git a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts new file mode 100644 index 00000000..79a67f02 --- /dev/null +++ b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts @@ -0,0 +1,19 @@ +import { PrismaRepository } from '@gitroom/nestjs-libraries/database/prisma/prisma.service'; +import { Injectable } from '@nestjs/common'; +import { User } from '@prisma/client'; + +@Injectable() +export class AgenciesRepository { + constructor( + private _socialMediaAgencies: PrismaRepository<'socialMediaAgency'> + ) {} + + getAgencyByUser(user: User) { + return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ + where: { + userId: user.id, + deletedAt: null, + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts new file mode 100644 index 00000000..3dd136dc --- /dev/null +++ b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts @@ -0,0 +1,11 @@ +import { Injectable } from '@nestjs/common'; +import { AgenciesRepository } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.repository'; +import { User } from '@prisma/client'; + +@Injectable() +export class AgenciesService { + constructor(private _agenciesRepository: AgenciesRepository) {} + getAgencyByUser(user: User) { + return this._agenciesRepository.getAgencyByUser(user); + } +} diff --git a/libraries/nestjs-libraries/src/database/prisma/database.module.ts b/libraries/nestjs-libraries/src/database/prisma/database.module.ts index 736c49b1..99b56385 100644 --- a/libraries/nestjs-libraries/src/database/prisma/database.module.ts +++ b/libraries/nestjs-libraries/src/database/prisma/database.module.ts @@ -27,6 +27,8 @@ import { MessagesRepository } from '@gitroom/nestjs-libraries/database/prisma/ma import { StripeService } from '@gitroom/nestjs-libraries/services/stripe.service'; import { ExtractContentService } from '@gitroom/nestjs-libraries/openai/extract.content.service'; import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; +import { AgenciesService } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.service'; +import { AgenciesRepository } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.repository'; @Global() @Module({ @@ -55,6 +57,8 @@ import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; MediaRepository, CommentsRepository, ItemUserRepository, + AgenciesService, + AgenciesRepository, ItemUserService, MessagesService, CommentsService, diff --git a/libraries/nestjs-libraries/src/database/prisma/schema.prisma b/libraries/nestjs-libraries/src/database/prisma/schema.prisma index 19321234..349b34d4 100644 --- a/libraries/nestjs-libraries/src/database/prisma/schema.prisma +++ b/libraries/nestjs-libraries/src/database/prisma/schema.prisma @@ -62,6 +62,7 @@ model User { orderSeller Orders[] @relation("orderSeller") payoutProblems PayoutProblems[] lastOnline DateTime @default(now()) + agencies SocialMediaAgency[] @@unique([email, providerName]) @@index([lastReadNotifications]) @@ -165,10 +166,63 @@ model Media { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userPicture User[] + agencies SocialMediaAgency[] @@index([organizationId]) } +model SocialMediaAgency { + id String @id @default(uuid()) + user User @relation(fields: [userId], references: [id]) + userId String + name String + logoId String? + logo Media? @relation(fields: [logoId], references: [id]) + tagline String? + address String? + phoneNumber String? + emailAddress String? + website String? + + facebook String? + instagram String? + twitter String? + linkedIn String? + youtube String? + otherSocialMedia String? + + primaryServices String + specialties String? + packages String? + caseStudies String? + + yearEstablished Int? + teamSize Int? + languagesSupported String? + clientTypes String? + clientTestimonials String? + + certifications String? + awards String? + + blog String? + faqs String? + events String? + freeConsultation Boolean @default(false) + + businessHours String? + serviceArea String? + termsAndConditions String? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + + @@index([userId]) + @@index([deletedAt]) + @@index([id]) +} + model Credits { id String @id @default(uuid()) organization Organization @relation(fields: [organizationId], references: [id])