🗃️ Structure database

This commit is contained in:
Nathan Lamy 2025-07-23 00:19:09 +02:00
parent 73db24d3c0
commit 2f7373f367
13 changed files with 5528 additions and 1 deletions

55
app/models/colle.ts Normal file
View file

@ -0,0 +1,55 @@
import { DateTime } from 'luxon'
import { BaseModel, column, hasMany, hasOne } from '@adonisjs/lucid/orm'
import User from './user.js'
import type { HasMany, HasOne } from '@adonisjs/lucid/types/relations'
import Subject from './subject.js'
import Room from './room.js'
import ColleAttachment from './colle_attachment.js'
import Examiner from './examiner.js'
export default class Colle extends BaseModel {
@column({ isPrimary: true })
declare id: number
@hasOne(() => User)
declare student: HasOne<typeof User>
@hasOne(() => Examiner)
declare examiner: HasOne<typeof Examiner>
// Bjcolle data
@column()
declare bjsecret: string
@column()
declare bjid: string
// Colle data
@hasOne(() => Subject)
declare subject: HasOne<typeof Subject>
@hasOne(() => Room)
declare room: HasOne<typeof Room>
@column()
declare grade: number
@column()
declare content: string
@column()
declare comment: string
@hasMany(() => ColleAttachment)
declare attachments: HasMany<typeof ColleAttachment>
// Time data
@column.dateTime()
declare date: DateTime
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime
}

View file

@ -0,0 +1,12 @@
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class ColleAttachment extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column()
declare name: string
@column()
declare path: string
}

9
app/models/examiner.ts Normal file
View file

@ -0,0 +1,9 @@
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class Examiner extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column()
declare name: string
}

9
app/models/room.ts Normal file
View file

@ -0,0 +1,9 @@
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class Room extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column()
declare name: string
}

9
app/models/subject.ts Normal file
View file

@ -0,0 +1,9 @@
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class Subject extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column()
declare name: string
}

View file

@ -5,7 +5,7 @@ export default class extends BaseSchema {
async up() { async up() {
this.schema.createTable(this.tableName, (table) => { this.schema.createTable(this.tableName, (table) => {
table.increments('id').notNullable() table.increments('id').primary()
table.string('class_name', 10).notNullable() table.string('class_name', 10).notNullable()
table.string('first_name', 50).notNullable() table.string('first_name', 50).notNullable()
table.string('last_name', 50).notNullable() table.string('last_name', 50).notNullable()

View file

@ -0,0 +1,16 @@
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'rooms'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id').primary()
table.string('name').notNullable()
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}

View file

@ -0,0 +1,16 @@
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'subjects'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id').primary()
table.string('name').notNullable()
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}

View file

@ -0,0 +1,16 @@
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'examiners'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id').primary()
table.string('name').notNullable()
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}

View file

@ -0,0 +1,35 @@
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'colles'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id').primary();
// Relations
table.integer('student_id').unsigned().references('id').inTable('users').onDelete('CASCADE');
table.integer('examiner_id').unsigned().references('id').inTable('examiners').onDelete('CASCADE');
table.integer('subject_id').unsigned().references('id').inTable('subjects').onDelete('SET NULL');
table.integer('room_id').unsigned().references('id').inTable('rooms').onDelete('SET NULL');
// Bjcolle data
table.string('bjsecret').nullable()
table.string('bjid').nullable()
// Colle data
table.decimal('grade', 5, 2).nullable()
table.text('content').nullable()
table.text('comment').nullable()
// Time data
table.dateTime('date').notNullable()
table.timestamp('created_at').notNullable()
table.timestamp('updated_at').notNullable()
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}

View file

@ -0,0 +1,22 @@
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'colle_attachments'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id').primary()
table.string('name').notNullable()
table.string('path').notNullable()
table
.integer('colle_id')
.unsigned()
.references('colles.id')
.onDelete('CASCADE')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}

5315
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -31,3 +31,16 @@ if (app.inDev) {
router.post('users', [UserController, 'create']) router.post('users', [UserController, 'create'])
} }
router.get('/users/@me', [UserController, 'me']).use(middleware.auth()) router.get('/users/@me', [UserController, 'me']).use(middleware.auth())
// TEST ROUTE
import redis from '@adonisjs/redis/services/main'
router.get('/', async () => {
await redis.publish("jobs_queue", JSON.stringify({
type: 2
}))
return { message: 'Hello, world!' }
})
// END TEST ROUTE