UsersController.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import User from 'App/Models/User'
  3. import PaginationService from 'App/Services/PaginationService'
  4. import { schema, rules } from '@ioc:Adonis/Core/Validator'
  5. import randomstring from 'randomstring'
  6. import Database from '@ioc:Adonis/Lucid/Database'
  7. export default class UsersController {
  8. private paginationService = new PaginationService(User)
  9. public async index({ request }: HttpContextContract) {
  10. return await this.paginationService.paginate(request.all())
  11. }
  12. public async store({ request }: HttpContextContract) {
  13. await request.validate({
  14. schema: schema.create({
  15. username: schema.string([])
  16. })
  17. })
  18. return await User.create(request.all())
  19. }
  20. public async show({ params }: HttpContextContract) {
  21. return await User.findOrFail(params.id)
  22. }
  23. public async update({ params, request }: HttpContextContract) {
  24. const user = await User.findOrFail(params.id)
  25. const payload = await request.validate({
  26. schema: schema.create({
  27. username: schema.string.optional([rules.maxLength(20)]),
  28. avatar: schema.string.optional([rules.maxLength(255)])
  29. })
  30. })
  31. user.merge(payload)
  32. return await user.save()
  33. }
  34. public async destroy({ params }: HttpContextContract) {
  35. const user = await User.findOrFail(params.id)
  36. await user.delete()
  37. }
  38. public async my({ auth }: HttpContextContract) {
  39. return auth.user
  40. }
  41. public async myAdmin({ auth, bouncer }: HttpContextContract) {
  42. await bouncer.authorize('admin')
  43. return auth.user
  44. }
  45. public async guest({ auth }: HttpContextContract) {
  46. const user = await User.create({
  47. username: 'fs_' + randomstring.generate(8),
  48. email: randomstring.generate(8) + '@guest.com',
  49. visitor: true
  50. })
  51. return {
  52. user,
  53. token: (await auth.use('api').generate(user)).token
  54. }
  55. }
  56. public async invited({ auth }: HttpContextContract) {
  57. return (
  58. await Database.from('users').where('referrer', auth.user!.id).count('*', 'count')
  59. )[0]
  60. }
  61. }