import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import User from 'App/Models/User' import PaginationService from 'App/Services/PaginationService' import { schema, rules } from '@ioc:Adonis/Core/Validator' import randomstring from 'randomstring' export default class UsersController { private paginationService = new PaginationService(User) public async index({ request }: HttpContextContract) { return await this.paginationService.paginate(request.all()) } public async store({ request }: HttpContextContract) { await request.validate({ schema: schema.create({ username: schema.string([]) }) }) return await User.create(request.all()) } public async show({ params }: HttpContextContract) { return await User.findOrFail(params.id) } public async update({ params, request }: HttpContextContract) { const user = await User.findOrFail(params.id) const payload = await request.validate({ schema: schema.create({ username: schema.string.optional([rules.maxLength(20)]), avatar: schema.string.optional([rules.maxLength(255)]) }) }) user.merge(payload) return await user.save() } public async destroy({ params }: HttpContextContract) { const user = await User.findOrFail(params.id) await user.delete() } public async my({ auth }: HttpContextContract) { return auth.user } public async myAdmin({ auth, bouncer }: HttpContextContract) { await bouncer.authorize('admin') return auth.user } public async guest({ auth }: HttpContextContract) { const user = await User.create({ username: 'fs_' + randomstring.generate(8), email: randomstring.generate(8) + '@guest.com', visitor: true }) return { user, token: (await auth.use('api').generate(user)).token } } }