UNPKG

@oleksiiteplenko/tt

Version:

CLI tool for tracking time on projects.

41 lines (35 loc) 1.43 kB
import { sql, type InferSelectModel } from 'drizzle-orm'; import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; export const projects = sqliteTable("projects", { id: integer("id").primaryKey({ autoIncrement: true }), name: text("name").notNull().unique(), createdAt: integer("created_at", { mode: "timestamp" }).notNull().default(sql`(unixepoch())`), }); export const tasks = sqliteTable("tasks", { id: integer("id").primaryKey({ autoIncrement: true }), projectId: integer("project_id").notNull().references(() => projects.id, { onDelete: 'cascade' }), name: text("name").notNull(), }); export const sessions = sqliteTable('sessions', { id: integer('id').primaryKey({ autoIncrement: true }), projectId: integer('project_id') .notNull() .references(() => projects.id, { onDelete: 'cascade' }), taskId: integer('task_id').references(() => tasks.id, { onDelete: 'cascade', }), createdAt: integer('created_at', { mode: 'timestamp' }) .notNull() .default(sql`(unixepoch())`), finishedAt: integer('finished_at', { mode: 'timestamp' }), duration: integer('duration').generatedAlwaysAs(sql` CASE WHEN finished_at IS NOT NULL THEN finished_at - created_at ELSE NULL END `), }); export type Project = InferSelectModel<typeof projects>; export type Task = InferSelectModel<typeof tasks>; export type Session = InferSelectModel<typeof sessions>;