| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import User, { UserRoles } from 'App/Models/User'
- import PaginationService from 'App/Services/PaginationService'
- import { schema, rules } from '@ioc:Adonis/Core/Validator'
- import randomstring from 'randomstring'
- import Database from '@ioc:Adonis/Lucid/Database'
- import { HttpException } from '@adonisjs/http-server/build/src/Exceptions/HttpException'
- import { HttpStatusCode } from 'axios'
- 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 newAdminUser({ request, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const data = await request.validate({
- schema: schema.create({
- username: schema.string([]),
- password: schema.string([]),
- email: schema.string.optional([rules.email()])
- })
- })
- return await User.create({
- ...data,
- role: UserRoles.Admin
- })
- }
- 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 updatePassword({ params, request, auth }: HttpContextContract) {
- if (!auth.user) {
- throw new HttpException('Unauthorized', HttpStatusCode.BadRequest)
- }
- const user = await User.findOrFail(auth.user.id)
- const payload = await request.validate({
- schema: schema.create({
- password: schema.string([rules.minLength(6), rules.maxLength(18)])
- })
- })
- user.password = payload.password
- 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
- }
- }
- public async invited({ auth }: HttpContextContract) {
- return (
- await Database.from('users').where('referrer', auth.user!.id).count('*', 'count')
- )[0]
- }
- }
|