mirror of
https://github.com/ArthurDanjou/artdanj-api.git
synced 2026-01-30 03:17:50 +01:00
@@ -136,7 +136,7 @@
|
|||||||
"name": "connection",
|
"name": "connection",
|
||||||
"propertyName": "connection",
|
"propertyName": "connection",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Define a custom database connection for the migration"
|
"description": "The connection flag is used to lookup the directory for the migration file"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "folder",
|
"name": "folder",
|
||||||
|
|||||||
@@ -7,24 +7,29 @@ export default class AuthController {
|
|||||||
public async login ({ request, auth, response }: HttpContextContract) {
|
public async login ({ request, auth, response }: HttpContextContract) {
|
||||||
const email = request.input('email')
|
const email = request.input('email')
|
||||||
const password = request.input('password')
|
const password = request.input('password')
|
||||||
|
const infinity = request.input('infinity', false)
|
||||||
|
|
||||||
const token = await auth.attempt(email, password, {
|
const token = await auth.attempt(email, password, {
|
||||||
expiresIn: '2 days'
|
expiresIn: infinity ? '' : '2 days'
|
||||||
|
})
|
||||||
|
return response.status(200).send({
|
||||||
|
token: token.toJSON()
|
||||||
})
|
})
|
||||||
return response.status(200).send(token.toJSON())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async createInfiniteToken ({ request, auth, response }: HttpContextContract) {
|
public async createInfiniteToken ({ request, auth, response }: HttpContextContract) {
|
||||||
const email = request.input('email')
|
const email = request.input('email')
|
||||||
const password = request.input('password')
|
const password = request.input('password')
|
||||||
const token = await auth.attempt(email, password)
|
const token = await auth.attempt(email, password)
|
||||||
return response.status(200).send(token.toJSON())
|
return response.status(200).send({
|
||||||
|
token: token.toJSON()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async logout ({ auth, response }: HttpContextContract) {
|
public async logout ({ auth, response }: HttpContextContract) {
|
||||||
await auth.logout()
|
await auth.logout()
|
||||||
return response.status(200).send({
|
return response.status(200).send({
|
||||||
message: 'You have been disconnected'
|
message: 'You have been disconnected!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,13 +48,13 @@ export default class AuthController {
|
|||||||
|
|
||||||
if (twitter.accessDenied()) {
|
if (twitter.accessDenied()) {
|
||||||
return response.status(403).send({
|
return response.status(403).send({
|
||||||
message: 'Access Denied'
|
message: 'Access Denied!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (twitter.stateMisMatch()) {
|
if (twitter.stateMisMatch()) {
|
||||||
return response.status(405).send({
|
return response.status(405).send({
|
||||||
message: 'Request expired. Retry again'
|
message: 'Request expired. Retry again!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,13 +77,13 @@ export default class AuthController {
|
|||||||
|
|
||||||
if (github.accessDenied()) {
|
if (github.accessDenied()) {
|
||||||
return response.status(403).send({
|
return response.status(403).send({
|
||||||
message: 'Access Denied'
|
message: 'Access Denied!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (github.stateMisMatch()) {
|
if (github.stateMisMatch()) {
|
||||||
return response.status(405).send({
|
return response.status(405).send({
|
||||||
message: 'Request expired. Retry again'
|
message: 'Request expired. Retry again!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,13 +106,13 @@ export default class AuthController {
|
|||||||
|
|
||||||
if (google.accessDenied()) {
|
if (google.accessDenied()) {
|
||||||
return response.status(403).send({
|
return response.status(403).send({
|
||||||
message: 'Access Denied'
|
message: 'Access Denied!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (google.stateMisMatch()) {
|
if (google.stateMisMatch()) {
|
||||||
return response.status(405).send({
|
return response.status(405).send({
|
||||||
message: 'Request expired. Retry again'
|
message: 'Request expired. Retry again!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,23 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import Application from "@ioc:Adonis/Core/Application";
|
import Application from "@ioc:Adonis/Core/Application";
|
||||||
import File from "App/Models/File";
|
import File from "App/Models/File";
|
||||||
|
|
||||||
export default class FileController {
|
export default class FileController {
|
||||||
|
|
||||||
public async index () {
|
public async index({response}: HttpContextContract) {
|
||||||
return File.query()
|
return response.status(200).send({
|
||||||
|
files: File.query()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async store ({request}: HttpContextContract) {
|
public async store({request, response}: HttpContextContract) {
|
||||||
const file = await request.file('file', {
|
const file = await request.file('file', {
|
||||||
extnames: ['jpg', 'png', 'jpeg']
|
extnames: ['jpg', 'png', 'jpeg']
|
||||||
})
|
})
|
||||||
const label = request.input('label')
|
const label = request.input('label')
|
||||||
|
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return 'Please upload file'
|
return 'Please upload file!'
|
||||||
}
|
}
|
||||||
if (file.hasErrors) {
|
if (file.hasErrors) {
|
||||||
return file.errors
|
return file.errors
|
||||||
@@ -25,16 +27,20 @@ export default class FileController {
|
|||||||
name: `${label}.${file.extname}`
|
name: `${label}.${file.extname}`
|
||||||
})
|
})
|
||||||
|
|
||||||
return await File.create({
|
return response.status(200).send({
|
||||||
fileName: `${label}.${file.extname}`,
|
file: await File.create({
|
||||||
label: label
|
fileName: `${label}.${file.extname}`,
|
||||||
|
label: label
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async destroy({ params }: HttpContextContract) {
|
public async destroy({params, response}: HttpContextContract) {
|
||||||
const file = await File.findOrFail(params.id)
|
const file = await File.findOrFail(params.id)
|
||||||
await file.delete()
|
await file.delete()
|
||||||
return { message: "Le fichier a bien été supprimée" }
|
return response.status(200).send({
|
||||||
|
message: 'File successfully deleted!'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import FormValidator from "App/Validators/FormValidator";
|
import FormValidator from "App/Validators/FormValidator";
|
||||||
import Form from "App/Models/Form";
|
import Form from "App/Models/Form";
|
||||||
import FormConfirmation from "App/Mailers/FormConfirmation";
|
import FormConfirmation from "App/Mailers/FormConfirmation";
|
||||||
@@ -7,7 +7,6 @@ export default class FormsController {
|
|||||||
|
|
||||||
public async send({ request, response }: HttpContextContract) {
|
public async send({ request, response }: HttpContextContract) {
|
||||||
const data = await request.validate(FormValidator)
|
const data = await request.validate(FormValidator)
|
||||||
|
|
||||||
await Form.create(data)
|
await Form.create(data)
|
||||||
|
|
||||||
await new FormConfirmation(data.name, data.email).preview()
|
await new FormConfirmation(data.name, data.email).preview()
|
||||||
|
|||||||
@@ -4,15 +4,24 @@ import GuestValidator from "App/Validators/guestbook/GuestValidator";
|
|||||||
|
|
||||||
export default class GuestBookController {
|
export default class GuestBookController {
|
||||||
|
|
||||||
public async get () {
|
public async get({response}: HttpContextContract) {
|
||||||
return GuestBookMessage.query().orderBy('created_at', 'desc')
|
return response.status(200).send({
|
||||||
|
guestbook_messages: GuestBookMessage.query().orderBy('created_at', 'desc')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async store ({request, auth}: HttpContextContract) {
|
public async store({request, auth, response}: HttpContextContract) {
|
||||||
if (auth.isLoggedIn) {
|
const data = await request.validate(GuestValidator)
|
||||||
const data = await request.validate(GuestValidator)
|
const user = await auth.user!
|
||||||
return await GuestBookMessage.create(data)
|
const guestbook_message = user.related('guestbook_message').firstOrCreate({
|
||||||
}
|
userId: user.id
|
||||||
|
}, {
|
||||||
|
...data,
|
||||||
|
userId: user.id
|
||||||
|
})
|
||||||
|
return response.status(200).send({
|
||||||
|
guestbook_message
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
|
|||||||
|
|
||||||
export default class PostsController {
|
export default class PostsController {
|
||||||
|
|
||||||
public async getLikes ({params}: HttpContextContract) {
|
public async getLikes({params, response}: HttpContextContract) {
|
||||||
let post = await Post.findBy('slug', params.slug)
|
let post = await Post.findBy('slug', params.slug)
|
||||||
|
|
||||||
if (!post) {
|
if (!post) {
|
||||||
@@ -13,7 +13,9 @@ export default class PostsController {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return post.likes
|
return response.status(200).send({
|
||||||
|
likes: post.likes
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async like ({params, response}: HttpContextContract) {
|
public async like ({params, response}: HttpContextContract) {
|
||||||
@@ -32,7 +34,6 @@ export default class PostsController {
|
|||||||
likes: getLikes
|
likes: getLikes
|
||||||
}).save()
|
}).save()
|
||||||
return response.status(200).send({
|
return response.status(200).send({
|
||||||
status: 200,
|
|
||||||
post
|
post
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -46,7 +47,6 @@ export default class PostsController {
|
|||||||
likes: getLikes
|
likes: getLikes
|
||||||
}).save()
|
}).save()
|
||||||
return response.status(200).send({
|
return response.status(200).send({
|
||||||
status: 200,
|
|
||||||
post
|
post
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ export default class ProfileController {
|
|||||||
"Dev",
|
"Dev",
|
||||||
"DevOps",
|
"DevOps",
|
||||||
"New technologies",
|
"New technologies",
|
||||||
"Gaming"
|
"Gaming",
|
||||||
|
"Cloud"
|
||||||
],
|
],
|
||||||
code: [
|
code: [
|
||||||
"Javascript",
|
"Javascript",
|
||||||
@@ -29,18 +30,18 @@ export default class ProfileController {
|
|||||||
"Software dev"
|
"Software dev"
|
||||||
],
|
],
|
||||||
technologies: {
|
technologies: {
|
||||||
web_app: ["VueJs", "NuxtJs", "Sass", "Tailwind"],
|
web_app: ["VueJs", "NuxtJs", "Sass", "Tailwind", "WindiCss"],
|
||||||
desktop_app: ["ElectronJs"],
|
desktop_app: ["ElectronJs"],
|
||||||
mobile_app: ["React Native"],
|
mobile_app: ["React Native", "Vue Native"],
|
||||||
back_end: {
|
back_end: {
|
||||||
typescript: ["AdonisJs"],
|
typescript: ["AdonisJs"],
|
||||||
java: ["Spring"]
|
java: ["Spring"]
|
||||||
},
|
},
|
||||||
databases: ["MongoDB", "MariaDB", "Redis"],
|
databases: ["MongoDB", "MariaDB", "Redis"],
|
||||||
messaging: ["RabbitMq"],
|
messaging: ["RabbitMQ"],
|
||||||
other: ["Docker", "Git"],
|
other: ["Docker", "Git"],
|
||||||
architecture: ["microservices", "event-driven", "design system pattern"],
|
architecture: ["microservices", "event-driven", "design system pattern"],
|
||||||
operating_systems: ['Windows', 'Linux']
|
operating_systems: ['MacOS', "Linux"]
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import Project from "App/Models/Project";
|
import Project from "App/Models/Project";
|
||||||
import ProjectValidator from "App/Validators/project/ProjectValidator";
|
import ProjectValidator from "App/Validators/project/ProjectValidator";
|
||||||
|
|
||||||
export default class ProjectsController {
|
export default class ProjectsController {
|
||||||
|
|
||||||
public async get ({ response }: HttpContextContract) {
|
public async get ({ response }: HttpContextContract) {
|
||||||
const projects = await Project.query().orderBy('id', 'asc')
|
|
||||||
return response.status(200).send({
|
return response.status(200).send({
|
||||||
projects
|
projects: await Project.query().orderBy('id', 'asc')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {UpdateGitHubReadme} from "App/Tasks/UpdateGithubReadme";
|
|||||||
|
|
||||||
export default class StatesController {
|
export default class StatesController {
|
||||||
|
|
||||||
public async get ({response}: HttpContextContract) {
|
public async get({response}: HttpContextContract) {
|
||||||
const is_sleeping = await Redis.get('states:sleeping')
|
const is_sleeping = await Redis.get('states:sleeping')
|
||||||
const is_listening_music = await Redis.get('states:listening')
|
const is_listening_music = await Redis.get('states:listening')
|
||||||
const is_developing = await Redis.get('states:developing')
|
const is_developing = await Redis.get('states:developing')
|
||||||
@@ -18,7 +18,7 @@ export default class StatesController {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async set ({request, response, params}: HttpContextContract) {
|
public async set({request, response, params}: HttpContextContract) {
|
||||||
const state = params.state
|
const state = params.state
|
||||||
const value = await request.input('value')
|
const value = await request.input('value')
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import Subscriber from "App/Models/Subscriber";
|
import Subscriber from "App/Models/Subscriber";
|
||||||
import SubscriberValidator from "App/Validators/subscriber/SubscriberValidator";
|
import SubscriberValidator from "App/Validators/subscriber/SubscriberValidator";
|
||||||
|
|
||||||
@@ -10,12 +10,23 @@ export default class SubscribersController {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async store ({ request, response }: HttpContextContract) {
|
public async store({request, response}: HttpContextContract) {
|
||||||
const data = await request.validate(SubscriberValidator)
|
const data = await request.validate(SubscriberValidator)
|
||||||
await Subscriber.create(data)
|
await Subscriber.create(data)
|
||||||
return response.status(200).send({
|
return response.status(200).send({
|
||||||
message: 'Subscriber successfully registered !'
|
message: 'Subscriber successfully registered!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async delete({request, response}: HttpContextContract) {
|
||||||
|
const data = await request.validate(SubscriberValidator)
|
||||||
|
const subscriber = await Subscriber.findBy('email', data.email)
|
||||||
|
if (subscriber) {
|
||||||
|
await subscriber.delete()
|
||||||
|
return response.status(200).send({
|
||||||
|
message: 'Subscriber successfully deleted!'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,34 +5,33 @@ import UserUpdateValidator from "App/Validators/users/UserUpdateValidator";
|
|||||||
|
|
||||||
export default class UsersController {
|
export default class UsersController {
|
||||||
|
|
||||||
public async index () {
|
public async index({response}: HttpContextContract) {
|
||||||
return User.query()
|
return response.status(200).send({
|
||||||
|
users: User.query()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async store ({request}: HttpContextContract) {
|
public async store({request, response}: HttpContextContract) {
|
||||||
const data = await request.validate(UserStoreValidator)
|
const data = await request.validate(UserStoreValidator)
|
||||||
return await User.create(data)
|
return response.status(200).send({
|
||||||
|
user: await User.create(data)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async show ({params}: HttpContextContract) {
|
public async show({params, response}: HttpContextContract) {
|
||||||
return await User.findOrFail(params.id)
|
return response.status(200).send({
|
||||||
|
user: await User.findOrFail(params.id)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async update({ request, params, response }: HttpContextContract) {
|
public async update({request, params, response}: HttpContextContract) {
|
||||||
const user = await User.findOrFail(params.id)
|
const user = await User.findOrFail(params.id)
|
||||||
const data = await request.validate(UserUpdateValidator)
|
const data = await request.validate(UserUpdateValidator)
|
||||||
const { email } = data
|
|
||||||
const user2 = await User.findBy('email', email)
|
|
||||||
|
|
||||||
if (user2 !== null && user.email !== email) {
|
|
||||||
return response.abort({
|
|
||||||
message: 'L\' adresse mail n\'est pas unique !'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
await user.merge(data).save()
|
await user.merge(data).save()
|
||||||
|
|
||||||
return { message: 'Le compte a été mis à jour' }
|
return response.status(200).send({
|
||||||
|
message: 'User successfully updated!'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async destroy({ response, params, auth }: HttpContextContract) {
|
public async destroy({ response, params, auth }: HttpContextContract) {
|
||||||
@@ -44,7 +43,9 @@ export default class UsersController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await user.delete()
|
await user.delete()
|
||||||
return { message: "L'utilisateur a bien été supprimé" }
|
return response.status(200).send({
|
||||||
|
message: 'User successfully deleted!'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { DateTime } from 'luxon'
|
import {DateTime} from 'luxon'
|
||||||
import {BaseModel, BelongsTo, belongsTo, column} from '@ioc:Adonis/Lucid/Orm'
|
import {BaseModel, BelongsTo, belongsTo, column} from '@ioc:Adonis/Lucid/Orm'
|
||||||
import User from "./User";
|
import User from "App/Models/User";
|
||||||
|
|
||||||
export default class GuestBookMessage extends BaseModel {
|
export default class GuestBookMessage extends BaseModel {
|
||||||
@column({ isPrimary: true })
|
@column({ isPrimary: true })
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import { DateTime } from 'luxon'
|
import {DateTime} from 'luxon'
|
||||||
import Hash from '@ioc:Adonis/Core/Hash'
|
import Hash from '@ioc:Adonis/Core/Hash'
|
||||||
import {
|
import {BaseModel, beforeSave, column, hasOne, HasOne,} from '@ioc:Adonis/Lucid/Orm'
|
||||||
column,
|
import GuestBookMessage from "App/Models/GuestBookMessage";
|
||||||
beforeSave,
|
|
||||||
BaseModel,
|
|
||||||
} from '@ioc:Adonis/Lucid/Orm'
|
|
||||||
|
|
||||||
export default class User extends BaseModel {
|
export default class User extends BaseModel {
|
||||||
@column({ isPrimary: true })
|
@column({isPrimary: true})
|
||||||
public id: number
|
public id: number
|
||||||
|
|
||||||
@column()
|
@column()
|
||||||
@@ -28,14 +25,17 @@ export default class User extends BaseModel {
|
|||||||
@column()
|
@column()
|
||||||
public rememberMeToken?: string
|
public rememberMeToken?: string
|
||||||
|
|
||||||
@column.dateTime({ autoCreate: true })
|
@hasOne(() => GuestBookMessage)
|
||||||
|
public guestbook_message: HasOne<typeof GuestBookMessage>
|
||||||
|
|
||||||
|
@column.dateTime({autoCreate: true})
|
||||||
public createdAt: DateTime
|
public createdAt: DateTime
|
||||||
|
|
||||||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
@column.dateTime({autoCreate: true, autoUpdate: true})
|
||||||
public updatedAt: DateTime
|
public updatedAt: DateTime
|
||||||
|
|
||||||
@beforeSave()
|
@beforeSave()
|
||||||
public static async hashPassword (user: User) {
|
public static async hashPassword(user: User) {
|
||||||
if (user.$dirty.password) {
|
if (user.$dirty.password) {
|
||||||
user.password = await Hash.make(user.password)
|
user.password = await Hash.make(user.password)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
||||||
|
|
||||||
export default class GuestValidator {
|
export default class GuestValidator {
|
||||||
@@ -6,10 +6,10 @@ export default class GuestValidator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public schema = schema.create({
|
public schema = schema.create({
|
||||||
user_id: schema.number( [
|
user_id: schema.number([
|
||||||
rules.required(),
|
rules.required(),
|
||||||
rules.unique({table: 'golden_messages', column: 'user_id'}),
|
rules.unique({table: 'golden_messages', column: 'user_id'}),
|
||||||
rules.exists({ table: 'users', column: 'id'})
|
rules.exists({table: 'users', column: 'id'})
|
||||||
]),
|
]),
|
||||||
message: schema.string({}, [
|
message: schema.string({}, [
|
||||||
rules.required()
|
rules.required()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
|
import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'
|
||||||
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
import {rules, schema} from '@ioc:Adonis/Core/Validator'
|
||||||
|
|
||||||
export default class UserUpdateValidator {
|
export default class UserUpdateValidator {
|
||||||
@@ -6,11 +6,13 @@ export default class UserUpdateValidator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public schema = schema.create({
|
public schema = schema.create({
|
||||||
email: schema.string.optional({ trim: true, escape: true }, [rules.email()]),
|
email: schema.string.optional({trim: true, escape: true}, [rules.email(), rules.unique({
|
||||||
password: schema.string.optional({ trim: true, escape: true }, [rules.confirmed()]),
|
table: 'users', column: 'email'
|
||||||
|
})]),
|
||||||
|
password: schema.string.optional({trim: true, escape: true}, [rules.confirmed()]),
|
||||||
is_confirmed: schema.boolean.optional(),
|
is_confirmed: schema.boolean.optional(),
|
||||||
confirmation_token: schema.string.optional({ trim: true, escape: true }),
|
confirmation_token: schema.string.optional({trim: true, escape: true}),
|
||||||
remember_me: schema.string.optional({ trim: true, escape: true }),
|
remember_me: schema.string.optional({trim: true, escape: true}),
|
||||||
})
|
})
|
||||||
|
|
||||||
public cacheKey = this.ctx.routeKey
|
public cacheKey = this.ctx.routeKey
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default class Locations extends BaseSchema {
|
|||||||
|
|
||||||
public async up () {
|
public async up () {
|
||||||
this.schema.createTable(this.tableName, (table) => {
|
this.schema.createTable(this.tableName, (table) => {
|
||||||
table.increments('id')
|
table.increments('id').primary()
|
||||||
table.string('place')
|
table.string('place')
|
||||||
table.string('left')
|
table.string('left')
|
||||||
table.date('since')
|
table.date('since')
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default class Forms extends BaseSchema {
|
|||||||
|
|
||||||
public async up () {
|
public async up () {
|
||||||
this.schema.createTable(this.tableName, (table) => {
|
this.schema.createTable(this.tableName, (table) => {
|
||||||
table.increments('id')
|
table.increments('id').primary()
|
||||||
table.string('name')
|
table.string('name')
|
||||||
table.string('email')
|
table.string('email')
|
||||||
table.string('subject')
|
table.string('subject')
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import BaseSchema from '@ioc:Adonis/Lucid/Schema'
|
|
||||||
|
|
||||||
export default class GoldenMessages extends BaseSchema {
|
|
||||||
protected tableName = 'golden_messages'
|
|
||||||
|
|
||||||
public async up () {
|
|
||||||
this.schema.createTable(this.tableName, (table) => {
|
|
||||||
table.increments('id')
|
|
||||||
table.integer('user_id').notNullable()
|
|
||||||
table.string('message')
|
|
||||||
table.timestamps()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
public async down () {
|
|
||||||
this.schema.dropTable(this.tableName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
22
database/migrations/1625146912533_guestbook_messages.ts
Normal file
22
database/migrations/1625146912533_guestbook_messages.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import BaseSchema from '@ioc:Adonis/Lucid/Schema'
|
||||||
|
|
||||||
|
export default class GuestbookMessages extends BaseSchema {
|
||||||
|
protected tableName = 'guestbook_messages'
|
||||||
|
|
||||||
|
public async up() {
|
||||||
|
this.schema.createTable(this.tableName, (table) => {
|
||||||
|
table.increments('id').primary()
|
||||||
|
table
|
||||||
|
.integer('user_id')
|
||||||
|
.unsigned()
|
||||||
|
.references('users.id')
|
||||||
|
.onDelete('CASCADE')
|
||||||
|
table.string('message')
|
||||||
|
table.timestamps(true, true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down() {
|
||||||
|
this.schema.dropTable(this.tableName)
|
||||||
|
}
|
||||||
|
}
|
||||||
23
yarn.lock
Executable file → Normal file
23
yarn.lock
Executable file → Normal file
@@ -191,9 +191,9 @@
|
|||||||
pino "^6.11.3"
|
pino "^6.11.3"
|
||||||
|
|
||||||
"@adonisjs/lucid@^15.0.1":
|
"@adonisjs/lucid@^15.0.1":
|
||||||
version "15.0.1"
|
version "15.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/@adonisjs/lucid/-/lucid-15.0.1.tgz#a8cdf12f3ae6bc5fa88d452e80423cf3afb8e598"
|
resolved "https://registry.yarnpkg.com/@adonisjs/lucid/-/lucid-15.0.2.tgz#99051cce48fc1d8061860b9efb09c18d53818a81"
|
||||||
integrity sha512-ab3tJ9JgafaXvtOzyqd83Xs6Z1raNnSZfkVJlRHvwf3rviBEAPOLVYUDtjx7QskDkDAIam+21WkUNRHcByXQcw==
|
integrity sha512-SLC2YYG33efHeq++qAXe6DA2fkQkgdaQwdBz+tjku7DneRBMre+mltXlf6Mow5WHUfq9b0fxh5GQA9tKGDdWkg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@poppinss/hooks" "^3.0.4"
|
"@poppinss/hooks" "^3.0.4"
|
||||||
"@poppinss/utils" "^3.1.3"
|
"@poppinss/utils" "^3.1.3"
|
||||||
@@ -202,9 +202,10 @@
|
|||||||
fast-deep-equal "^3.1.3"
|
fast-deep-equal "^3.1.3"
|
||||||
igniculus "^1.5.0"
|
igniculus "^1.5.0"
|
||||||
knex "^0.95.6"
|
knex "^0.95.6"
|
||||||
knex-dynamic-connection "^2.1.0"
|
knex-dynamic-connection "^2.1.1"
|
||||||
luxon "^1.27.0"
|
luxon "^1.27.0"
|
||||||
macroable "^5.1.3"
|
macroable "^5.1.3"
|
||||||
|
normalize-path "^3.0.0"
|
||||||
pretty-hrtime "^1.0.3"
|
pretty-hrtime "^1.0.3"
|
||||||
qs "^6.10.1"
|
qs "^6.10.1"
|
||||||
|
|
||||||
@@ -514,9 +515,9 @@
|
|||||||
"@types/responselike" "*"
|
"@types/responselike" "*"
|
||||||
|
|
||||||
"@types/debug@^4.1.5":
|
"@types/debug@^4.1.5":
|
||||||
version "4.1.5"
|
version "4.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
|
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.6.tgz#0b7018723084918a865eff99249c490505df2163"
|
||||||
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
|
integrity sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==
|
||||||
|
|
||||||
"@types/faker@^5.5.6":
|
"@types/faker@^5.5.6":
|
||||||
version "5.5.6"
|
version "5.5.6"
|
||||||
@@ -2651,7 +2652,7 @@ kleur@^4.1.4:
|
|||||||
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
|
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
|
||||||
integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==
|
integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==
|
||||||
|
|
||||||
knex-dynamic-connection@^2.1.0:
|
knex-dynamic-connection@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/knex-dynamic-connection/-/knex-dynamic-connection-2.1.1.tgz#a3c9934a51bf93e2ea6c3da2f9f3dca742f7a123"
|
resolved "https://registry.yarnpkg.com/knex-dynamic-connection/-/knex-dynamic-connection-2.1.1.tgz#a3c9934a51bf93e2ea6c3da2f9f3dca742f7a123"
|
||||||
integrity sha512-/Lwg/T13eNRJVoSJ4e9SH3slVUmg37UHxDxVluAAKdJZxYVj8YsP2x50JSk310RmKsYbOZ8oB8SwVVEuRa4nYw==
|
integrity sha512-/Lwg/T13eNRJVoSJ4e9SH3slVUmg37UHxDxVluAAKdJZxYVj8YsP2x50JSk310RmKsYbOZ8oB8SwVVEuRa4nYw==
|
||||||
@@ -4637,9 +4638,9 @@ type-is@^1.6.18:
|
|||||||
mime-types "~2.1.24"
|
mime-types "~2.1.24"
|
||||||
|
|
||||||
typescript@^4.3.4:
|
typescript@^4.3.4:
|
||||||
version "4.3.4"
|
version "4.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
|
||||||
integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
|
integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
|
||||||
|
|
||||||
uglify-js@^3.5.1:
|
uglify-js@^3.5.1:
|
||||||
version "3.13.10"
|
version "3.13.10"
|
||||||
|
|||||||
Reference in New Issue
Block a user