diff --git a/apps/backend/src/api/api.module.ts b/apps/backend/src/api/api.module.ts index be829065..803db821 100644 --- a/apps/backend/src/api/api.module.ts +++ b/apps/backend/src/api/api.module.ts @@ -27,6 +27,7 @@ import { ExtractContentService } from '@gitroom/nestjs-libraries/openai/extract. 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'; +import { PublicController } from '@gitroom/backend/api/routes/public.controller'; const authenticatedController = [ UsersController, @@ -62,7 +63,7 @@ const authenticatedController = [ ] : []), ], - controllers: [StripeController, AuthController, ...authenticatedController], + controllers: [StripeController, AuthController, PublicController, ...authenticatedController], providers: [ AuthService, StripeService, diff --git a/apps/backend/src/api/routes/agencies.controller.ts b/apps/backend/src/api/routes/agencies.controller.ts index 3b556cd1..882841c5 100644 --- a/apps/backend/src/api/routes/agencies.controller.ts +++ b/apps/backend/src/api/routes/agencies.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post } from '@nestjs/common'; +import { Body, Controller, Get, Post } from '@nestjs/common'; import { User } from '@prisma/client'; import { ApiTags } from '@nestjs/swagger'; import { AgenciesService } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.service'; @@ -10,12 +10,15 @@ import { CreateAgencyDto } from '@gitroom/nestjs-libraries/dtos/agencies/create. export class AgenciesController { constructor(private _agenciesService: AgenciesService) {} @Get('/') - async generateImage(@GetUserFromRequest() user: User) { + async getAgencyByUser(@GetUserFromRequest() user: User) { return this._agenciesService.getAgencyByUser(user); } @Post('/') - async createAgency(@GetUserFromRequest() user: User, body: CreateAgencyDto) { + async createAgency( + @GetUserFromRequest() user: User, + @Body() body: CreateAgencyDto + ) { return this._agenciesService.createAgency(user, body); } } diff --git a/apps/backend/src/api/routes/public.controller.ts b/apps/backend/src/api/routes/public.controller.ts new file mode 100644 index 00000000..e2098b7f --- /dev/null +++ b/apps/backend/src/api/routes/public.controller.ts @@ -0,0 +1,30 @@ +import { Controller, Get, Param } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { AgenciesService } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.service'; + +@ApiTags('Public') +@Controller('/public') +export class PublicController { + constructor(private _agenciesService: AgenciesService) {} + @Get('/agencies-list') + async getAgencyByUser() { + return this._agenciesService.getAllAgencies(); + } + + @Get('/agencies-list-slug') + async getAgencySlug() { + return this._agenciesService.getAllAgenciesSlug(); + } + + @Get('/agencies-information/:agency') + async getAgencyInformation( + @Param('agency') agency: string, + ) { + return this._agenciesService.getAgencyInformation(agency); + } + + @Get('/agencies-list-count') + async getAgenciesCount() { + return this._agenciesService.getCount(); + } +} diff --git a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts index 44860c3d..27eab628 100644 --- a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts @@ -10,12 +10,64 @@ export class AgenciesRepository { private _socialMediaAgenciesNiche: PrismaRepository<'socialMediaAgencyNiche'> ) {} + getAllAgencies() { + return this._socialMediaAgencies.model.socialMediaAgency.findMany({ + where: { + deletedAt: null, + approved: true, + }, + include: { + logo: true, + niches: true, + }, + }); + } + + getCount() { + return this._socialMediaAgencies.model.socialMediaAgency.count({ + where: { + deletedAt: null, + approved: true, + }, + }); + } + + getAllAgenciesSlug() { + return this._socialMediaAgencies.model.socialMediaAgency.findMany({ + where: { + deletedAt: null, + approved: true, + }, + select: { + slug: true, + }, + }); + } + + getAgencyInformation(agency: string) { + return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ + where: { + slug: agency, + deletedAt: null, + approved: true, + }, + include: { + logo: true, + niches: true, + }, + }); + } + getAgencyByUser(user: User) { return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ where: { userId: user.id, deletedAt: null, }, + include: { + logo: true, + niches: true, + }, }); } @@ -32,17 +84,13 @@ export class AgenciesRepository { facebook: body.facebook, instagram: body.instagram, twitter: body.twitter, - linkedIn: body.linkedin, + linkedIn: body.linkedIn, youtube: body.youtube, tiktok: body.tiktok, - logoId: body.logo, + logoId: body.logo.id, shortDescription: body.shortDescription, description: body.description, - niches: { - create: body.niche.map((n) => ({ - niche: n, - })), - }, + approved: false, }, create: { userId: user.id, @@ -51,12 +99,14 @@ export class AgenciesRepository { facebook: body.facebook, instagram: body.instagram, twitter: body.twitter, - linkedIn: body.linkedin, + linkedIn: body.linkedIn, youtube: body.youtube, tiktok: body.tiktok, - logoId: body.logo, + logoId: body.logo.id, shortDescription: body.shortDescription, description: body.description, + slug: body.name.toLowerCase().replace(/ /g, '-'), + approved: false, }, select: { id: true, @@ -68,7 +118,7 @@ export class AgenciesRepository { where: { agencyId: insertAgency.id, niche: { - notIn: body.niche, + notIn: body.niches, }, }, } @@ -86,7 +136,7 @@ export class AgenciesRepository { } ); - const addNewNiche = body.niche.filter( + const addNewNiche = body.niches.filter( (n) => !currentNiche.some((c) => c.niche === n) ); diff --git a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts index 29d580ac..0c0cd70c 100644 --- a/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts @@ -2,15 +2,164 @@ import { Injectable } from '@nestjs/common'; import { AgenciesRepository } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.repository'; import { User } from '@prisma/client'; import { CreateAgencyDto } from '@gitroom/nestjs-libraries/dtos/agencies/create.agency.dto'; +import { EmailService } from '@gitroom/nestjs-libraries/services/email.service'; @Injectable() export class AgenciesService { - constructor(private _agenciesRepository: AgenciesRepository) {} + constructor( + private _agenciesRepository: AgenciesRepository, + private _emailService: EmailService + ) {} getAgencyByUser(user: User) { return this._agenciesRepository.getAgencyByUser(user); } - createAgency(user: User, body: CreateAgencyDto) { - return this._agenciesRepository.createAgency(user, body); + getCount() { + return this._agenciesRepository.getCount(); + } + + getAllAgencies() { + return this._agenciesRepository.getAllAgencies(); + } + + getAllAgenciesSlug() { + return this._agenciesRepository.getAllAgenciesSlug(); + } + + getAgencyInformation(agency: string) { + return this._agenciesRepository.getAgencyInformation(agency); + } + + async createAgency(user: User, body: CreateAgencyDto) { + const agency = await this._agenciesRepository.createAgency(user, body); + await this._emailService.sendEmail( + 'nevo@postiz.com', + 'New agency created', + ` + + +
+ + +| + + ${ + body.website + } + | +
|
+
+
+ Social Medias:
+ ${
+ body.facebook
+ } |
+
+
+ Logo+
+ |
+
+
+ Name+${ + body.name + } + |
+
+
+ Short Description+${ + body.shortDescription + } + |
+
+
+ Description+${ + body.description + } + |
+
+
+ Niches+${body.niches.join( + ',' + )} + |
+
|
+ To approve click here + To decline click here + |
+
|
+ © 2024 Your Gitroom Limited All rights reserved. + |
+