diff --git a/app/Controllers/Http/GuestBookController.ts b/app/Controllers/Http/GuestBookController.ts index b7f80e7..fae543f 100644 --- a/app/Controllers/Http/GuestBookController.ts +++ b/app/Controllers/Http/GuestBookController.ts @@ -1,16 +1,18 @@ import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext"; import GuestBookMessage from "../../Models/GuestBookMessage"; -import StoreValidator from "../../Validators/guestbook/StoreValidator"; +import GuestValidator from "../../Validators/guestbook/GuestValidator"; export default class GuestBookController { - public async index () { + public async get () { return GuestBookMessage.query().orderBy('created_at', 'desc') } - public async store ({request}: HttpContextContract) { - const data = await request.validate(StoreValidator) - return await GuestBookMessage.create(data) + public async store ({request, auth}: HttpContextContract) { + if (auth.isLoggedIn) { + const data = await request.validate(GuestValidator) + return await GuestBookMessage.create(data) + } } } diff --git a/app/Controllers/Http/LocationsController.ts b/app/Controllers/Http/LocationsController.ts index 29ffb5c..73fb1f9 100644 --- a/app/Controllers/Http/LocationsController.ts +++ b/app/Controllers/Http/LocationsController.ts @@ -13,7 +13,7 @@ export default class LocationsController { }) } - public async add ({ request, response }: HttpContextContract) { + public async store ({ request, response }: HttpContextContract) { const data = await request.validate(LocationValidator) await Location.create(data) return response.status(200).send({ diff --git a/app/Controllers/Http/ProjectsController.ts b/app/Controllers/Http/ProjectsController.ts index 7b031e0..212ce49 100644 --- a/app/Controllers/Http/ProjectsController.ts +++ b/app/Controllers/Http/ProjectsController.ts @@ -11,7 +11,7 @@ export default class ProjectsController { }) } - public async add ({ request, response}: HttpContextContract) { + public async store ({ request, response}: HttpContextContract) { const data = await request.validate(ProjectValidator) await Project.create(data) return response.status(200).send({ diff --git a/app/Controllers/Http/SubscribersController.ts b/app/Controllers/Http/SubscribersController.ts new file mode 100644 index 0000000..198b699 --- /dev/null +++ b/app/Controllers/Http/SubscribersController.ts @@ -0,0 +1,21 @@ +import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' +import SubscriberValidator from "../../Validators/subscriber/SubscriberValidator"; +import Subscriber from "../../Models/Subscriber"; + +export default class SubscribersController { + + public async get ({ response }: HttpContextContract) { + return response.status(200).send({ + count: Subscriber.query().count + }) + } + + public async store ({ request, response }: HttpContextContract) { + const data = await request.validate(SubscriberValidator) + await Subscriber.create(data) + return response.status(200).send({ + message: 'Subscriber successfully registered !' + }) + } + +} diff --git a/app/Controllers/Http/UsersController.ts b/app/Controllers/Http/UsersController.ts index 166182f..18f5c78 100644 --- a/app/Controllers/Http/UsersController.ts +++ b/app/Controllers/Http/UsersController.ts @@ -1,7 +1,7 @@ import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext' import User from "App/Models/User"; -import StoreValidator from "App/Validators/users/StoreValidator"; -import UpdateValidator from "App/Validators/users/UpdateValidator"; +import UserStoreValidator from "../../../app/Validators/users/UserStoreValidator"; +import UserUpdateValidator from "../../../app/Validators/users/UserUpdateValidator"; export default class UsersController { @@ -10,7 +10,7 @@ export default class UsersController { } public async store ({request}: HttpContextContract) { - const data = await request.validate(StoreValidator) + const data = await request.validate(UserStoreValidator) return await User.create(data) } @@ -20,7 +20,7 @@ export default class UsersController { public async update({ request, params, response }: HttpContextContract) { const user = await User.findOrFail(params.id) - const data = await request.validate(UpdateValidator) + const data = await request.validate(UserUpdateValidator) const { email } = data const user2 = await User.findBy('email', email) diff --git a/app/Models/Subscriber.ts b/app/Models/Subscriber.ts new file mode 100644 index 0000000..8464704 --- /dev/null +++ b/app/Models/Subscriber.ts @@ -0,0 +1,16 @@ +import { DateTime } from 'luxon' +import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm' + +export default class Subscriber extends BaseModel { + @column({ isPrimary: true }) + public id: number + + @column() + public email: string + + @column.dateTime({ autoCreate: true }) + public createdAt: DateTime + + @column.dateTime({ autoCreate: true, autoUpdate: true }) + public updatedAt: DateTime +} diff --git a/app/Validators/guestbook/StoreValidator.ts b/app/Validators/guestbook/GuestValidator.ts similarity index 93% rename from app/Validators/guestbook/StoreValidator.ts rename to app/Validators/guestbook/GuestValidator.ts index 10463d6..dca0283 100644 --- a/app/Validators/guestbook/StoreValidator.ts +++ b/app/Validators/guestbook/GuestValidator.ts @@ -1,7 +1,7 @@ import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import {rules, schema} from '@ioc:Adonis/Core/Validator' -export default class StoreValidator { +export default class GuestValidator { constructor (private ctx: HttpContextContract) { } diff --git a/app/Validators/subscriber/StoreValidator.ts b/app/Validators/subscriber/SubscriberValidator.ts similarity index 86% rename from app/Validators/subscriber/StoreValidator.ts rename to app/Validators/subscriber/SubscriberValidator.ts index f077768..6c44bed 100644 --- a/app/Validators/subscriber/StoreValidator.ts +++ b/app/Validators/subscriber/SubscriberValidator.ts @@ -1,7 +1,7 @@ import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import {rules, schema} from '@ioc:Adonis/Core/Validator' -export default class StoreValidator { +export default class SubscriberValidator { constructor (private ctx: HttpContextContract) { } @@ -9,8 +9,7 @@ export default class StoreValidator { email: schema.string({ trim: true }, [ rules.email(), rules.unique({table: 'subscribers', column: 'email'}) - ]), - name: schema.string() + ]) }) public cacheKey = this.ctx.routeKey diff --git a/app/Validators/subscriber/UpdateValidator.ts b/app/Validators/subscriber/UpdateValidator.ts deleted file mode 100644 index a879367..0000000 --- a/app/Validators/subscriber/UpdateValidator.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' -import {rules, schema} from '@ioc:Adonis/Core/Validator' - -export default class UpdateValidator { - constructor (private ctx: HttpContextContract) { - } - - public schema = schema.create({ - email: schema.string({ trim: true }, [ - rules.email(), - rules.unique({table: 'subscribers', column: 'email'}) - ]), - name: schema.string.optional() - }) - - public cacheKey = this.ctx.routeKey - - public messages = { - required: 'Le champ {{field}} doit ĂȘtre valide !' - } -} diff --git a/app/Validators/users/StoreValidator.ts b/app/Validators/users/UserStoreValidator.ts similarity index 93% rename from app/Validators/users/StoreValidator.ts rename to app/Validators/users/UserStoreValidator.ts index a27168d..a9749c8 100644 --- a/app/Validators/users/StoreValidator.ts +++ b/app/Validators/users/UserStoreValidator.ts @@ -1,7 +1,7 @@ import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import {rules, schema} from '@ioc:Adonis/Core/Validator' -export default class StoreValidator { +export default class UserStoreValidator { constructor (private ctx: HttpContextContract) { } diff --git a/app/Validators/users/UpdateValidator.ts b/app/Validators/users/UserUpdateValidator.ts similarity index 95% rename from app/Validators/users/UpdateValidator.ts rename to app/Validators/users/UserUpdateValidator.ts index b58b427..9badcf3 100644 --- a/app/Validators/users/UpdateValidator.ts +++ b/app/Validators/users/UserUpdateValidator.ts @@ -1,7 +1,7 @@ import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import {rules, schema} from '@ioc:Adonis/Core/Validator' -export default class UpdateValidator { +export default class UserUpdateValidator { constructor (private ctx: HttpContextContract) { } diff --git a/database/migrations/1603020084373_subscribers.ts b/database/migrations/1603020084373_subscribers.ts index 5fb9837..6a3d955 100644 --- a/database/migrations/1603020084373_subscribers.ts +++ b/database/migrations/1603020084373_subscribers.ts @@ -6,7 +6,6 @@ export default class Subscribers extends BaseSchema { public async up () { this.schema.createTable(this.tableName, (table) => { table.increments('id').primary() - table.string('name') table.string('email').notNullable() table.timestamps(true) }) diff --git a/database/migrations/1605093034793_users.ts b/database/migrations/1605093034793_users.ts deleted file mode 100644 index b5cf8b9..0000000 --- a/database/migrations/1605093034793_users.ts +++ /dev/null @@ -1,34 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' - -export default class UsersSchema extends BaseSchema { - protected tableName = 'users' - - public async up () { - this.schema.createTable(this.tableName, (table) => { - table.increments('id').primary() - table.string('email', 255).notNullable() - table.string('password', 180).defaultTo(this.randomPassword()).notNullable() - table.boolean('is_confirmed').defaultTo(false).notNullable() - table.string('remember_me_token').defaultTo(null).nullable() - table.string('confirmation_token').defaultTo(null).nullable() - table.timestamps(true) - }) - } - - private randomPassword () { - let chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - let password = '' - let passwordLength = 12 - - for (let i = 0; i < passwordLength; i++) { - let rnum = Math.floor(Math.random() * chars.length); - password += chars.substring(rnum,rnum+1); - } - - return password - } - - public async down () { - this.schema.dropTable(this.tableName) - } -} diff --git a/database/migrations/1608409461999_docker_commands.ts b/database/migrations/1608409461999_docker_commands.ts deleted file mode 100644 index f4fa533..0000000 --- a/database/migrations/1608409461999_docker_commands.ts +++ /dev/null @@ -1,17 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' - -export default class DockerCommands extends BaseSchema { - protected tableName = 'docker_commands' - - public async up () { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table.bigInteger('commands') - table.timestamps(true) - }) - } - - public async down () { - this.schema.dropTable(this.tableName) - } -} diff --git a/database/migrations/1608409468598_docker_builds.ts b/database/migrations/1608409468598_docker_builds.ts deleted file mode 100644 index 1c47f1b..0000000 --- a/database/migrations/1608409468598_docker_builds.ts +++ /dev/null @@ -1,17 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' - -export default class DockerBuilds extends BaseSchema { - protected tableName = 'docker_builds' - - public async up () { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table.bigInteger('builds') - table.timestamps(true) - }) - } - - public async down () { - this.schema.dropTable(this.tableName) - } -} diff --git a/start/routes.ts b/start/routes.ts index 2f12c38..4f4849d 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -41,6 +41,7 @@ Route.get('/states', 'StatesController.get') Route.get('/projects', 'ProjectsController.get') Route.resource('users', 'UsersController').only(['index', 'show']) + Route.group(() => { Route.get('/', 'FileController.index') Route.get('/:filename', async ({ response, params }) => { @@ -51,22 +52,27 @@ Route.group(() => { Route.group(() => { Route.resource('users', 'UsersController').only(['store', 'update', 'destroy']) Route.resource('files', 'FileController').only(['store', 'destroy']) - Route.post('/locations', 'LocationsController.add') - Route.post('/projects', 'ProjectsController.add') + Route.post('/locations', 'LocationsController.store') + Route.post('/projects', 'ProjectsController.store') Route.resource('guestbook', 'GuestBookController').only(['index', 'show']) }).middleware('auth:web') Route.group(() => { - // ArtAPI Route.post('form', 'FormsController.send') - // ArtSite + Route.group(() => { Route.get('/:slug', 'PostsController.getLikes') Route.post('/:slug/like', 'PostsController.like') Route.post('/:slug/unlike', 'PostsController.unlike') }).prefix('posts') -}).middleware('auth:api') + + Route.get('subscribers', 'SubscribersController.get') + Route.post('subscribers', 'SubscribersController.store') + + Route.get('guestbook', 'GuestBookController.get') + Route.post('guestbook', 'GuestBookController.store') +})//.middleware('auth:api') Route.group(() => { Route.get('/me', 'AuthController.user').middleware('auth')