new db schema works perfectly first try frfr
This commit is contained in:
@@ -1,25 +1,25 @@
|
||||
import { sql, eq } from 'drizzle-orm';
|
||||
import { integer, sqliteTable, text, sqliteView } from 'drizzle-orm/sqlite-core';
|
||||
|
||||
export const players = sqliteTable('players', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
firstName: text('firstName').notNull(),
|
||||
lastName: text('lastName').notNull(),
|
||||
team: integer('team')
|
||||
.references(() => teams.id)
|
||||
.notNull(),
|
||||
division: integer('division').references(() => divisions.id)
|
||||
});
|
||||
|
||||
export const teams = sqliteTable('teams', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
name: text('name').notNull(),
|
||||
name: text('team_name').notNull(),
|
||||
color: text('color').notNull().default('white')
|
||||
});
|
||||
|
||||
export const divisions = sqliteTable('divisions', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
name: text('name').notNull()
|
||||
});
|
||||
|
||||
export const eventAttributions = sqliteTable('eventAttributions', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
eventID: integer('eventID')
|
||||
.references(() => events.id)
|
||||
.notNull(),
|
||||
playerID: integer('playerID')
|
||||
.references(() => players.id)
|
||||
.notNull()
|
||||
name: text('div_name').notNull()
|
||||
});
|
||||
|
||||
export const scoringPresets = sqliteTable('scoringPresets', {
|
||||
@@ -29,62 +29,56 @@ export const scoringPresets = sqliteTable('scoringPresets', {
|
||||
points: integer('points').notNull().default(0)
|
||||
});
|
||||
|
||||
export const events = sqliteTable('events', {
|
||||
export const eventTypes = sqliteTable('eventTypes', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
name: text('name').notNull(),
|
||||
name: text('event_name').notNull(),
|
||||
preset: integer('preset')
|
||||
.references(() => scoringPresets.presetID)
|
||||
.notNull()
|
||||
});
|
||||
|
||||
export const registeredEvents = sqliteTable('registeredEvents', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
eventType: integer('event_type')
|
||||
.references(() => eventTypes.id)
|
||||
.notNull(),
|
||||
division: integer('division')
|
||||
.references(() => divisions.id)
|
||||
.notNull(),
|
||||
order: integer('order').notNull(),
|
||||
state: integer('state').default(0).notNull(),
|
||||
timeCompleted: integer('timeCompleted')
|
||||
state: integer('event_state').notNull().default(0),
|
||||
timeCompleted: integer('time_completed')
|
||||
});
|
||||
|
||||
export const players = sqliteTable('players', {
|
||||
export const registeredPlayers = sqliteTable('registeredPlayers', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
firstName: text('firstName').notNull(),
|
||||
lastName: text('lastName').notNull(),
|
||||
team: integer('team')
|
||||
.references(() => teams.id)
|
||||
.notNull(),
|
||||
division: integer('division')
|
||||
.references(() => divisions.id)
|
||||
.notNull()
|
||||
});
|
||||
|
||||
export const scorers = sqliteTable('scorers', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
firstName: text('firstName').notNull(),
|
||||
lastName: text('lastName').notNull(),
|
||||
email: text('email').notNull(),
|
||||
password: text('password').notNull(),
|
||||
displayName: text('displayName').notNull(),
|
||||
role: text('role').notNull().default('scorer')
|
||||
});
|
||||
|
||||
export const ledger = sqliteTable('ledger', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
timestamp: integer('timestamp', { mode: 'timestamp' })
|
||||
.notNull()
|
||||
.default(sql`(unixepoch())`),
|
||||
type: text('type').notNull().default('event'),
|
||||
event: integer('event').references(() => events.id),
|
||||
scorer: integer('scorer').references(() => scorers.id)
|
||||
});
|
||||
|
||||
export const ledgerScores = sqliteTable('ledgerScores', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
ledgerID: integer('ledgerID')
|
||||
.references(() => ledger.id)
|
||||
.notNull(),
|
||||
player: integer('player')
|
||||
playerID: integer('player_registered')
|
||||
.references(() => players.id)
|
||||
.notNull(),
|
||||
placement: integer('placement').references(() => scoringPresets.placement),
|
||||
points: integer('points').notNull().default(0)
|
||||
registeredEventID: integer('event_registered')
|
||||
.references(() => registeredEvents.id)
|
||||
.notNull(),
|
||||
placement: integer('player_placement').notNull().default(0)
|
||||
});
|
||||
|
||||
export const mainLedger = sqliteTable('mainLedger', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
timestamp: integer('ledger_timestamp', { mode: 'timestamp' })
|
||||
.notNull()
|
||||
.default(sql`(unixepoch())`),
|
||||
updateType: text('update_type').notNull().default('event'),
|
||||
registeredEvent: integer('registered_event_reference').references(() => registeredEvents.id),
|
||||
scorer: text('scorer_logged').default('some dude idk')
|
||||
});
|
||||
|
||||
export const scoreLedger = sqliteTable('scoresLedger', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
ledgerID: integer('ledger_address')
|
||||
.references(() => mainLedger.id)
|
||||
.notNull(),
|
||||
teamID: integer('team_being_scored')
|
||||
.references(() => teams.id)
|
||||
.notNull(),
|
||||
points: integer('pointsAwarded').default(0).notNull()
|
||||
});
|
||||
|
||||
export const teamScoresView = sqliteView('teamScoresView').as((qb) => {
|
||||
@@ -93,28 +87,9 @@ export const teamScoresView = sqliteView('teamScoresView').as((qb) => {
|
||||
teamId: teams.id,
|
||||
teamName: teams.name,
|
||||
teamColor: teams.color,
|
||||
totalPoints: sql<number>`sum(${ledgerScores.points})`.mapWith(Number).as('totalPoints')
|
||||
totalPoints: sql<number>`sum(${scoreLedger.points})`.mapWith(Number).as('totalPoints')
|
||||
})
|
||||
.from(teams)
|
||||
.leftJoin(ledgerScores, eq(teams.id, ledgerScores.player))
|
||||
.groupBy(teams.id);
|
||||
});
|
||||
|
||||
export const playerDetailsView = sqliteView('playerDetailsView').as((qb) => {
|
||||
return qb
|
||||
.select({
|
||||
playerId: players.id,
|
||||
firstName: players.firstName,
|
||||
lastName: players.lastName,
|
||||
teamID: teams.id,
|
||||
teamName: teams.name,
|
||||
teamColor: teams.color,
|
||||
divisionId: divisions.id,
|
||||
eventId: events.id
|
||||
})
|
||||
.from(players)
|
||||
.innerJoin(teams, eq(players.team, teams.id))
|
||||
.innerJoin(divisions, eq(players.division, divisions.id))
|
||||
.leftJoin(eventAttributions, eq(players.id, eventAttributions.playerID))
|
||||
.leftJoin(events, eq(eventAttributions.eventID, events.id));
|
||||
.leftJoin(scoreLedger, eq(teams.id, scoreLedger.teamID))
|
||||
.groupBy(teams.id, teams.name, teams.color);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user