🎉 init: 小龙的工作空间

This commit is contained in:
大海
2026-06-06 10:40:48 +08:00
commit a188ee1426
3201 changed files with 231817 additions and 0 deletions
@@ -0,0 +1,58 @@
// Auto-generated Book service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Book, CreateBookInput, UpdateBookInput } from "../types/index.js";
export class BookService {
/** List all books */
list(): Book[] {
return queryAll<Book>("SELECT * FROM books ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Book | undefined {
return queryOne<Book>("SELECT * FROM books WHERE id = ?", [id]);
}
/** Create */
create(input: CreateBookInput): Book {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO books (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateBookInput): Book | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE books SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM books WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated Item service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Item, CreateItemInput, UpdateItemInput } from "../types/index.js";
export class ItemService {
/** List all items */
list(): Item[] {
return queryAll<Item>("SELECT * FROM items ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Item | undefined {
return queryOne<Item>("SELECT * FROM items WHERE id = ?", [id]);
}
/** Create */
create(input: CreateItemInput): Item {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO items (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateItemInput): Item | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE items SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM items WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated Note service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Note, CreateNoteInput, UpdateNoteInput } from "../types/index.js";
export class NoteService {
/** List all notes */
list(): Note[] {
return queryAll<Note>("SELECT * FROM notes ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Note | undefined {
return queryOne<Note>("SELECT * FROM notes WHERE id = ?", [id]);
}
/** Create */
create(input: CreateNoteInput): Note {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO notes (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateNoteInput): Note | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE notes SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM notes WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,54 @@
// Auto-generated NoteTag service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { NoteTag, CreateNoteTagInput, UpdateNoteTagInput } from "../types/index.js";
export class NoteTagService {
/** List all note_tags */
list(): NoteTag[] {
return queryAll<NoteTag>("SELECT * FROM note_tags ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): NoteTag | undefined {
return queryOne<NoteTag>("SELECT * FROM note_tags WHERE id = ?", [id]);
}
/** Create */
create(input: CreateNoteTagInput): NoteTag {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = false;
const hasUpdatedAt = false;
const cols = ["id", "note_id", "tag_id"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.noteId ?? null, input.tagId ?? null];
execute(`INSERT INTO note_tags (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateNoteTagInput): NoteTag | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.noteId !== undefined) { sets.push("note_id = ?"); values.push(input.noteId); }
if (input.tagId !== undefined) { sets.push("tag_id = ?"); values.push(input.tagId); }
if (sets.length === 0) return existing;
values.push(id);
execute(`UPDATE note_tags SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM note_tags WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated ReadingProgress service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { ReadingProgress, CreateReadingProgressInput, UpdateReadingProgressInput } from "../types/index.js";
export class ReadingProgressService {
/** List all reading_progress */
list(): ReadingProgress[] {
return queryAll<ReadingProgress>("SELECT * FROM reading_progress ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): ReadingProgress | undefined {
return queryOne<ReadingProgress>("SELECT * FROM reading_progress WHERE id = ?", [id]);
}
/** Create */
create(input: CreateReadingProgressInput): ReadingProgress {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO reading_progress (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateReadingProgressInput): ReadingProgress | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE reading_progress SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM reading_progress WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated ReadingStatu service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { ReadingStatu, CreateReadingStatuInput, UpdateReadingStatuInput } from "../types/index.js";
export class ReadingStatuService {
/** List all reading_status */
list(): ReadingStatu[] {
return queryAll<ReadingStatu>("SELECT * FROM reading_status ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): ReadingStatu | undefined {
return queryOne<ReadingStatu>("SELECT * FROM reading_status WHERE id = ?", [id]);
}
/** Create */
create(input: CreateReadingStatuInput): ReadingStatu {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO reading_status (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateReadingStatuInput): ReadingStatu | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE reading_status SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM reading_status WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated Review service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Review, CreateReviewInput, UpdateReviewInput } from "../types/index.js";
export class ReviewService {
/** List all reviews */
list(): Review[] {
return queryAll<Review>("SELECT * FROM reviews ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Review | undefined {
return queryOne<Review>("SELECT * FROM reviews WHERE id = ?", [id]);
}
/** Create */
create(input: CreateReviewInput): Review {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO reviews (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateReviewInput): Review | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE reviews SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM reviews WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,58 @@
// Auto-generated Stat service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Stat, CreateStatInput, UpdateStatInput } from "../types/index.js";
export class StatService {
/** List all stats */
list(): Stat[] {
return queryAll<Stat>("SELECT * FROM stats ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Stat | undefined {
return queryOne<Stat>("SELECT * FROM stats WHERE id = ?", [id]);
}
/** Create */
create(input: CreateStatInput): Stat {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "user_id", "title", "description", "status", "data", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.userId ?? null, input.title ?? null, input.description ?? null, input.status ?? null, input.data ?? null, now, now];
execute(`INSERT INTO stats (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateStatInput): Stat | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.userId !== undefined) { sets.push("user_id = ?"); values.push(input.userId); }
if (input.title !== undefined) { sets.push("title = ?"); values.push(input.title); }
if (input.description !== undefined) { sets.push("description = ?"); values.push(input.description); }
if (input.status !== undefined) { sets.push("status = ?"); values.push(input.status); }
if (input.data !== undefined) { sets.push("data = ?"); values.push(input.data); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE stats SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM stats WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,54 @@
// Auto-generated Tag service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { Tag, CreateTagInput, UpdateTagInput } from "../types/index.js";
export class TagService {
/** List all tags */
list(): Tag[] {
return queryAll<Tag>("SELECT * FROM tags ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): Tag | undefined {
return queryOne<Tag>("SELECT * FROM tags WHERE id = ?", [id]);
}
/** Create */
create(input: CreateTagInput): Tag {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = false;
const hasUpdatedAt = false;
const cols = ["id", "name", "color"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.name ?? null, input.color ?? null];
execute(`INSERT INTO tags (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateTagInput): Tag | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.name !== undefined) { sets.push("name = ?"); values.push(input.name); }
if (input.color !== undefined) { sets.push("color = ?"); values.push(input.color); }
if (sets.length === 0) return existing;
values.push(id);
execute(`UPDATE tags SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM tags WHERE id = ?", [id]);
return result.changes > 0;
}
}
@@ -0,0 +1,56 @@
// Auto-generated User service
import { queryAll, queryOne, execute } from "../db/client.js";
import type { User, CreateUserInput, UpdateUserInput } from "../types/index.js";
export class UserService {
/** List all users */
list(): User[] {
return queryAll<User>("SELECT * FROM users ORDER BY created_at DESC");
}
/** Get by ID */
getById(id: string): User | undefined {
return queryOne<User>("SELECT * FROM users WHERE id = ?", [id]);
}
/** Create */
create(input: CreateUserInput): User {
const id = crypto.randomUUID();
const now = new Date().toISOString();
const hasCreatedAt = true;
const hasUpdatedAt = true;
const cols = ["id", "phone", "nickname", "avatar_url", "created_at", "updated_at"];
const placeholders = cols.map(() => "?").join(", ");
const values = [id, input.phone ?? null, input.nickname ?? null, input.avatarUrl ?? null, now, now];
execute(`INSERT INTO users (${cols.join(", ")}) VALUES (${placeholders})`, values);
return this.getById(id)!;
}
/** Update */
update(id: string, input: UpdateUserInput): User | undefined {
const existing = this.getById(id);
if (!existing) return undefined;
const sets: string[] = [];
const values: unknown[] = [];
if (input.phone !== undefined) { sets.push("phone = ?"); values.push(input.phone); }
if (input.nickname !== undefined) { sets.push("nickname = ?"); values.push(input.nickname); }
if (input.avatarUrl !== undefined) { sets.push("avatar_url = ?"); values.push(input.avatarUrl); }
if (sets.length === 0) return existing;
sets.push("updated_at = ?");
values.push(new Date().toISOString());
values.push(id);
execute(`UPDATE users SET ${sets.join(", ")} WHERE id = ?`, values);
return this.getById(id)!;
}
/** Delete */
delete(id: string): boolean {
const result = execute("DELETE FROM users WHERE id = ?", [id]);
return result.changes > 0;
}
}