UsersController.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import User, { UserRoles } 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 newAdminUser({ request, bouncer }: HttpContextContract) {
  21. await bouncer.authorize('admin')
  22. const data = await request.validate({
  23. schema: schema.create({
  24. username: schema.string([]),
  25. password: schema.string([]),
  26. email: schema.string.optional([rules.email()])
  27. })
  28. })
  29. return await User.create({
  30. ...data,
  31. role: UserRoles.Admin
  32. })
  33. }
  34. public async show({ params }: HttpContextContract) {
  35. return await User.findOrFail(params.id)
  36. }
  37. public async update({ params, request }: HttpContextContract) {
  38. const user = await User.findOrFail(params.id)
  39. const payload = await request.validate({
  40. schema: schema.create({
  41. username: schema.string.optional([rules.maxLength(20)]),
  42. avatar: schema.string.optional([rules.maxLength(255)])
  43. })
  44. })
  45. user.merge(payload)
  46. return await user.save()
  47. }
  48. public async destroy({ params }: HttpContextContract) {
  49. const user = await User.findOrFail(params.id)
  50. await user.delete()
  51. }
  52. public async my({ auth }: HttpContextContract) {
  53. return auth.user
  54. }
  55. public async myAdmin({ auth, bouncer }: HttpContextContract) {
  56. await bouncer.authorize('admin')
  57. return auth.user
  58. }
  59. public async guest({ auth }: HttpContextContract) {
  60. const user = await User.create({
  61. username: 'fs_' + randomstring.generate(8),
  62. email: randomstring.generate(8) + '@guest.com',
  63. visitor: true
  64. })
  65. return {
  66. user,
  67. token: (await auth.use('api').generate(user)).token
  68. }
  69. }
  70. public async invited({ auth }: HttpContextContract) {
  71. return (
  72. await Database.from('users').where('referrer', auth.user!.id).count('*', 'count')
  73. )[0]
  74. }
  75. }