diff --git a/drizzle/0001_elite_odin.sql b/drizzle/0001_elite_odin.sql new file mode 100644 index 0000000..8c6c131 --- /dev/null +++ b/drizzle/0001_elite_odin.sql @@ -0,0 +1,25 @@ +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE `__new_movies` ( + `id` integer PRIMARY KEY NOT NULL, + `title` text NOT NULL, + `adult` integer NOT NULL, + `backdrop_path` text NOT NULL, + `genre_ids` text NOT NULL, + `original_language` text NOT NULL, + `original_title` text NOT NULL, + `overview` text NOT NULL, + `popularity` real NOT NULL, + `poster_path` text NOT NULL, + `release_date` text NOT NULL, + `video` integer NOT NULL, + `vote_average` real NOT NULL, + `vote_count` integer NOT NULL, + `seen` integer DEFAULT false, + `favorite` integer DEFAULT false +); +--> statement-breakpoint +INSERT INTO `__new_movies`("id", "title", "overview", "popularity", "poster_path", "release_date", "seen", "favorite") +SELECT "id", "title", "overview", "popularity", "poster_path", "release_date", "seen", "favorite" FROM `movies`;--> statement-breakpoint +DROP TABLE `movies`;--> statement-breakpoint +ALTER TABLE `__new_movies` RENAME TO `movies`;--> statement-breakpoint +PRAGMA foreign_keys=ON; \ No newline at end of file diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000..52c8582 --- /dev/null +++ b/drizzle/meta/0001_snapshot.json @@ -0,0 +1,142 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "c3b4d292-f58b-4df8-844c-6e534034c832", + "prevId": "19a2bad6-49be-485d-ac5e-291bd3d664ad", + "tables": { + "movies": { + "name": "movies", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "adult": { + "name": "adult", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "backdrop_path": { + "name": "backdrop_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "genre_ids": { + "name": "genre_ids", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "original_language": { + "name": "original_language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "original_title": { + "name": "original_title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "overview": { + "name": "overview", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "popularity": { + "name": "popularity", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "poster_path": { + "name": "poster_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "release_date": { + "name": "release_date", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "video": { + "name": "video", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "vote_average": { + "name": "vote_average", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "vote_count": { + "name": "vote_count", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "seen": { + "name": "seen", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "favorite": { + "name": "favorite", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index a9f8db4..a78166e 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -8,6 +8,13 @@ "when": 1754676538678, "tag": "0000_breezy_lester", "breakpoints": true + }, + { + "idx": 1, + "version": "6", + "when": 1754948246595, + "tag": "0001_elite_odin", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts index 5f7c9c6..b019759 100644 --- a/src/lib/db/index.ts +++ b/src/lib/db/index.ts @@ -2,6 +2,7 @@ import { drizzle } from "drizzle-orm/libsql"; import { movies } from "./schema"; import { eq } from "drizzle-orm"; +import { Movie } from "@/types/global"; const db = drizzle(process.env.DB_FILE_NAME!); @@ -9,17 +10,20 @@ export const getMovies = async () => { return await db.select().from(movies).$withCache(); }; -export const addMovie = async (movie: typeof movies.$inferInsert) => { - await db.insert(movies).values(movie).onConflictDoNothing(); +export const addMovie = async (movie: Movie) => { + await db + .insert(movies) + .values({ + ...movie, + genre_ids: JSON.stringify(movie.genre_ids), + }) + .onConflictDoNothing(); }; export const deleteMovie = async (id: number) => { await db.delete(movies).where(eq(movies.id, id)); }; -export const updateMovie = async ( - id: number, - movie: Partial -) => { - await db.update(movies).set(movie).where(eq(movies.id, id)); +export const updateMovie = async (movieId: number, movie: Partial) => { + await db.update(movies).set(movie).where(eq(movies.id, movieId)); }; diff --git a/src/lib/db/schema.ts b/src/lib/db/schema.ts index 756618b..a36c545 100644 --- a/src/lib/db/schema.ts +++ b/src/lib/db/schema.ts @@ -3,11 +3,18 @@ import { integer, real, sqliteTable, text } from "drizzle-orm/sqlite-core"; export const movies = sqliteTable("movies", { id: integer("id").primaryKey(), title: text("title").notNull(), + adult: integer("adult", { mode: "boolean" }).notNull(), + backdrop_path: text("backdrop_path").notNull(), + genre_ids: text("genre_ids").notNull(), + original_language: text("original_language").notNull(), + original_title: text("original_title").notNull(), overview: text("overview").notNull(), popularity: real("popularity").notNull(), - releaseDate: text("release_date").notNull(), - posterPath: text("poster_path").notNull(), - seen: integer("seen").default(0).notNull(), - favorite: integer("favorite").default(0).notNull(), - notes: text("notes").default("").notNull(), + poster_path: text("poster_path").notNull(), + release_date: text("release_date").notNull(), + video: integer("video", { mode: "boolean" }).notNull(), + vote_average: real("vote_average").notNull(), + vote_count: integer("vote_count").notNull(), + seen: integer("seen", { mode: "boolean" }).default(false), + favorite: integer("favorite", { mode: "boolean" }).default(false), }); diff --git a/src/types/global.d.ts b/src/types/global.d.ts new file mode 100644 index 0000000..7b1d808 --- /dev/null +++ b/src/types/global.d.ts @@ -0,0 +1,4 @@ +import { movies } from "@/lib/db/schema"; +import { SearchResult } from "@/lib/tmdb/types"; + +type Movie = typeof movies.$inferSelect;