Skip to content

Instantly share code, notes, and snippets.

@Gwash3189
Created August 25, 2022 06:31
Show Gist options
  • Save Gwash3189/3167e5707d7263be8880c4f03c0575d6 to your computer and use it in GitHub Desktop.
Save Gwash3189/3167e5707d7263be8880c4f03c0575d6 to your computer and use it in GitHub Desktop.
src/pages/api/accounts/index.ts
import {PrismaClientKnownRequestError} from '@prisma/client/runtime'
import {NextApiRequest, NextApiResponse} from 'next'
import {install, Repositorys, Logger} from 'nextjs-backend-helpers'
import {
createAccountArgumentsSchema,
} from '../../../domains/accounts/schemas'
import {
AppController,
} from '../../../domains/controllers/application-controller'
import {rateLimit} from '../../../middleware/ratelimit'
import {AccountRepository} from '../../../repositories/account-repository'
export class AccountsController extends AppController {
constructor() {
super()
this.before(rateLimit)
this.rescue(PrismaClientKnownRequestError, (error, _request, response) => {
Logger.error({message: error.message})
response.status(400).json({
errors: ['Account with requested name already exists'],
})
})
}
get accounts() {
return Repositorys.find(AccountRepository)
}
async post(_request: NextApiRequest, response: NextApiResponse) {
const result = this.params
.validate(createAccountArgumentsSchema)
if (result.success) {
const account = await this.accounts.create({
name: result.data.name,
})
response.json({
data: {
account,
},
})
return
}
response.status(400).json({
errors: [result.error],
})
}
}
export default install(AccountsController)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment