Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ module.exports = {
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-semi': 'off'
'@typescript-eslint/no-semi': 'off',
'prettier/prettier': [
'error',
{
endOfLine: 'auto'
}
]
}
}
10 changes: 8 additions & 2 deletions .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,11 @@
"singleQuote": true,
"trailingComma": "none",
"printWidth": 120,
"semi": false
}
"semi": false,
"prettier/prettier": [
"error",
{
"endOfLine": "auto"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { RaffleEntity } from '@/domain/entities'
import { EditRaffleUseCaseParams, EditRaffleUseCaseResult } from '@/domain/usecases/raffle/edit-raffle.usecase'

export interface EditRaffleRepository {
updateRaffle: (id: string, data: EditRaffleUseCaseParams) => Promise<EditRaffleUseCaseResult>
}

export type EditRaffleRepositoryParams = EditRaffleUseCaseParams

export type EditRaffleRepositoryResult = RaffleEntity | Error
29 changes: 29 additions & 0 deletions src/application/services/raffle/edit-raffle.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { EditRaffleRepository } from '@/application/contracts/repositories/raffle/edit-raffle.repository'
import { EditRaffleError } from '@/domain/errors/edit-raffle.error'
import { EditRaffleUseCase, EditRaffleUseCaseParams, EditRaffleUseCaseResult } from '@/domain/usecases/raffle'
import { Inject, Injectable } from '@nestjs/common'

@Injectable()
export class EditRaffleService implements EditRaffleUseCase {
constructor(@Inject('EditRaffleRepository') private readonly raffleRepository: EditRaffleRepository) {}

public async execute(id: string, params: EditRaffleUseCaseParams): Promise<EditRaffleUseCaseResult> {
try {
const raffle = await this.raffleRepository.updateRaffle(id, params)

if (!raffle) {
return new EditRaffleError()
}

const updatedRaffle = await this.raffleRepository.updateRaffle(id, params)

if (updatedRaffle instanceof Error) {
return updatedRaffle
}

return updatedRaffle
} catch (error) {
return new EditRaffleError()
}
}
}
6 changes: 6 additions & 0 deletions src/domain/errors/edit-raffle.error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export class EditRaffleError extends Error {
constructor() {
super('Error edit Raffle')
this.name = 'EditRaffleError'
}
}
18 changes: 18 additions & 0 deletions src/domain/usecases/raffle/edit-raffle.usecase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { RaffleEntity } from '@/domain/entities'

export interface EditRaffleUseCase {
execute(id: string, params: EditRaffleUseCaseParams): Promise<EditRaffleUseCaseResult>
}

export type EditRaffleUseCaseParams = {
providerUserId: string
title: string
priceProduct: number
amountNumber: number
priceNumber: number
drawDate: string
description?: string
winningNumber?: number
}

export type EditRaffleUseCaseResult = RaffleEntity | Error
1 change: 1 addition & 0 deletions src/domain/usecases/raffle/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './create-raffle.usecase'
export * from './edit-raffle.usecase'
19 changes: 19 additions & 0 deletions src/presenter/controllers/raffle/edit-raffle.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { EditRaffleDto } from '@/presenter/dtos/raffle/edit-raffle.dto'
import { EditRaffleUseCase } from '@/domain/usecases/raffle/edit-raffle.usecase'
import { Body, Controller, Inject, Put, Res, Param } from '@nestjs/common'

@Controller('raffles')
export class EditRaffleController {
constructor(@Inject('EditRaffleUseCase') private readonly editRaffleService: EditRaffleUseCase) {}

@Put(':id')
async handle(@Body() body: EditRaffleDto, @Res() res: any, @Param('id') id: string): Promise<any> {
const raffle = await this.editRaffleService.execute(id, body)

if (raffle instanceof Error) {
return raffle.name === 'NotFoundError' ? res.status(404).json(raffle) : res.status(500).json(raffle)
}

return res.status(200).json(raffle)
}
}
38 changes: 38 additions & 0 deletions src/presenter/dtos/raffle/edit-raffle.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { IsNotEmpty, IsNumber, IsOptional, IsString, Matches } from 'class-validator'

export class EditRaffleDto {
@IsString()
@IsNotEmpty()
'providerUserId': string

@IsString()
@IsNotEmpty()
'title': string

@IsString()
@IsOptional()
'description': string

@IsNumber()
@IsNotEmpty()
'amountNumber': number

@IsNumber()
@IsOptional()
'winningNumber': number

@IsNumber()
@IsOptional()
'priceProduct': number

@IsNumber()
@IsNotEmpty()
'priceNumber': number

@IsString()
@IsNotEmpty()
@Matches(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/, {
message: "Date format must be 'YYYY-MM-DD HH:mm:ss'"
})
'drawDate': string
}