mirror of
https://github.com/ArthurDanjou/artdanj-shortener.git
synced 2026-01-14 13:54:03 +01:00
Create user methods
This commit is contained in:
@@ -1,41 +1,52 @@
|
||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
||||
import User from "App/Models/User";
|
||||
import UserStoreValidator from "App/Validators/users/UserStoreValidator";
|
||||
import UserUpdateValidator from "App/Validators/users/UserUpdateValidator";
|
||||
import Env from "@ioc:Adonis/Core/Env";
|
||||
|
||||
export default class UsersController {
|
||||
|
||||
public async login ({request, auth, response}: HttpContextContract) {
|
||||
const email = request.input('email')
|
||||
const password = request.input('password')
|
||||
|
||||
const token = await auth.use('api').attempt(email, password, {
|
||||
expiresIn: '2 days'
|
||||
})
|
||||
public async index ({ response }: HttpContextContract) {
|
||||
return response.status(200).send({
|
||||
token: token.toJSON()
|
||||
users: await User.all()
|
||||
})
|
||||
}
|
||||
|
||||
public async createInfiniteToken ({response, request, auth}: HttpContextContract) {
|
||||
const email = request.input('email')
|
||||
const password = request.input('password')
|
||||
const token = await auth.use('api').attempt(email, password)
|
||||
public async store ({ request, response }: HttpContextContract) {
|
||||
const data = await request.validate(UserStoreValidator)
|
||||
return response.status(200).send({
|
||||
token: token.toJSON()
|
||||
user: await User.create(data)
|
||||
})
|
||||
}
|
||||
|
||||
public async logout ({response, auth, i18n}: HttpContextContract) {
|
||||
await auth.use('api').revoke()
|
||||
public async show ({ params, response }: HttpContextContract) {
|
||||
return response.status(200).send({
|
||||
message: i18n.formatMessage('messages.logout')
|
||||
user: await User.findOrFail(params.id)
|
||||
})
|
||||
}
|
||||
|
||||
public async me ({response, auth}: HttpContextContract) {
|
||||
await auth.authenticate()
|
||||
public async update ({ request, params, response }: HttpContextContract) {
|
||||
const user = await User.findOrFail(params.id)
|
||||
const data = await request.validate(UserUpdateValidator)
|
||||
await user.merge(data).save()
|
||||
|
||||
return response.status(200).send({
|
||||
user: auth.user
|
||||
user
|
||||
})
|
||||
}
|
||||
|
||||
public async destroy ({ response, params, auth }: HttpContextContract) {
|
||||
const user = await User.findOrFail(params.id)
|
||||
const admin = await User.findBy('email', Env.get('ADMIN_USER'))
|
||||
|
||||
if (auth.user?.id != admin?.id) {
|
||||
return response.unauthorized()
|
||||
}
|
||||
|
||||
await user.delete()
|
||||
return response.status(200).send({
|
||||
message: 'User successfully deleted!'
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
24
app/Validators/users/UserStoreValidator.ts
Executable file
24
app/Validators/users/UserStoreValidator.ts
Executable file
@@ -0,0 +1,24 @@
|
||||
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
||||
|
||||
export default class UserStoreValidator {
|
||||
constructor (protected ctx: HttpContextContract) {}
|
||||
|
||||
public schema = schema.create({
|
||||
email: schema.string({ trim: true }, [
|
||||
rules.email(),
|
||||
rules.required(),
|
||||
rules.unique({
|
||||
table: 'users',
|
||||
column: 'email'
|
||||
})
|
||||
]),
|
||||
password: schema.string({ trim: true },
|
||||
[
|
||||
rules.confirmed()
|
||||
]
|
||||
)
|
||||
})
|
||||
|
||||
public messages = {}
|
||||
}
|
||||
27
app/Validators/users/UserUpdateValidator.ts
Executable file
27
app/Validators/users/UserUpdateValidator.ts
Executable file
@@ -0,0 +1,27 @@
|
||||
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
||||
|
||||
export default class UserUpdateValidator {
|
||||
constructor (protected ctx: HttpContextContract) {}
|
||||
|
||||
public schema = schema.create({
|
||||
email: schema.string.optional({ trim: true },
|
||||
[
|
||||
rules.email(),
|
||||
rules.unique(
|
||||
{
|
||||
table: 'users',
|
||||
column: 'email'
|
||||
})
|
||||
]
|
||||
),
|
||||
password: schema.string.optional({ trim: true },
|
||||
[
|
||||
rules.confirmed(),
|
||||
rules.minLength(8)
|
||||
]
|
||||
)
|
||||
})
|
||||
|
||||
public messages = {}
|
||||
}
|
||||
Reference in New Issue
Block a user