UsersController.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. export default class UsersController {
  7. private paginationService = new PaginationService(User)
  8. public async index({ request }: HttpContextContract) {
  9. return await this.paginationService.paginate(request.all())
  10. }
  11. public async store({ request }: HttpContextContract) {
  12. await request.validate({
  13. schema: schema.create({
  14. username: schema.string([])
  15. })
  16. })
  17. return await User.create(request.all())
  18. }
  19. public async show({ params }: HttpContextContract) {
  20. return await User.findOrFail(params.id)
  21. }
  22. public async update({ params, request }: HttpContextContract) {
  23. const user = await User.findOrFail(params.id)
  24. const payload = await request.validate({
  25. schema: schema.create({
  26. username: schema.string.optional([rules.maxLength(20)]),
  27. avatar: schema.string.optional([rules.maxLength(255)])
  28. })
  29. })
  30. user.merge(payload)
  31. return await user.save()
  32. }
  33. public async destroy({ params }: HttpContextContract) {
  34. const user = await User.findOrFail(params.id)
  35. await user.delete()
  36. }
  37. public async my({ auth }: HttpContextContract) {
  38. return auth.user
  39. }
  40. public async myAdmin({ auth, bouncer }: HttpContextContract) {
  41. await bouncer.authorize('admin')
  42. return auth.user
  43. }
  44. public async guest({ auth }: HttpContextContract) {
  45. const user = await User.create({
  46. username: 'fs_' + randomstring.generate(8),
  47. email: randomstring.generate(8) + '@guest.com',
  48. visitor: true
  49. })
  50. return {
  51. user,
  52. token: (await auth.use('api').generate(user)).token
  53. }
  54. }
  55. }