x1ongzhu 2 лет назад
Родитель
Сommit
68ca133250

+ 26 - 0
app/Controllers/Http/ReferrersController.ts

@@ -0,0 +1,26 @@
+import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
+import Collection from 'App/Models/Collection'
+import PaginationService from 'App/Services/PaginationService'
+import { schema, rules } from '@ioc:Adonis/Core/Validator'
+import Referrer from 'App/Models/Referrer'
+
+export default class ReferrersController {
+    private paginationService = new PaginationService(Referrer)
+    public async index({ request }: HttpContextContract) {
+        return await this.paginationService.paginate(request.all())
+    }
+
+    public async store({ request }: HttpContextContract) {
+        const data: any = await request.validate({
+            schema: schema.create({
+                email: schema.string([rules.email()]),
+                referrer: schema.number()
+            })
+        })
+        return await Referrer.create(data)
+    }
+
+    public async get(email: string) {
+        return await Referrer.findBy('email', email)
+    }
+}

+ 19 - 0
app/Models/Referrer.ts

@@ -0,0 +1,19 @@
+import { DateTime } from 'luxon'
+import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
+
+export default class Referrer extends BaseModel {
+    @column({ isPrimary: true })
+    public id: number
+
+    @column.dateTime({ autoCreate: true })
+    public createdAt: DateTime
+
+    @column.dateTime({ autoCreate: true, autoUpdate: true })
+    public updatedAt: DateTime
+
+    @column()
+    public email: string
+
+    @column()
+    public referrer: number
+}

+ 24 - 0
database/migrations/1703237592940_referrers.ts

@@ -0,0 +1,24 @@
+import BaseSchema from '@ioc:Adonis/Lucid/Schema'
+
+export default class extends BaseSchema {
+    protected tableName = 'referrers'
+
+    public async up() {
+        this.schema.createTable(this.tableName, (table) => {
+            table.increments('id')
+            table.datetime('created_at', { useTz: true })
+            table.datetime('updated_at', { useTz: true })
+            table.string('email')
+            table
+                .integer('referrer')
+                .unsigned()
+                .references('id')
+                .inTable('users')
+                .onDelete('CASCADE')
+        })
+    }
+
+    public async down() {
+        this.schema.dropTable(this.tableName)
+    }
+}

+ 1 - 0
start/routes.ts

@@ -70,6 +70,7 @@ Route.group(() => {
     Route.resource('episodes', 'EpisodesController').apiOnly()
     Route.resource('categories', 'CategoriesController').apiOnly()
     Route.resource('banners', 'BannersController').apiOnly()
+    Route.resource('referrer', 'ReferrersController').apiOnly()
 
     Route.group(() => {
         Route.group(() => {