1
1
import { tasks , categories , type Task , type InsertTask , type Category , type InsertCategory } from "@shared/schema" ;
2
- import { db } from "./db" ;
3
- import { eq } from "drizzle-orm" ;
4
2
5
3
export interface IStorage {
6
4
// Task operations
@@ -16,75 +14,78 @@ export interface IStorage {
16
14
deleteCategory ( id : number ) : Promise < void > ;
17
15
}
18
16
19
- export class DatabaseStorage implements IStorage {
17
+ export class MemStorage implements IStorage {
18
+ private tasks : Map < number , Task > ;
19
+ private categories : Map < number , Category > ;
20
+ private taskId : number ;
21
+ private categoryId : number ;
22
+
23
+ constructor ( ) {
24
+ this . tasks = new Map ( ) ;
25
+ this . categories = new Map ( ) ;
26
+ this . taskId = 1 ;
27
+ this . categoryId = 1 ;
28
+
29
+ // Add default categories
30
+ this . createCategory ( { name : "Work" , color : "#0066FF" } ) ;
31
+ this . createCategory ( { name : "Personal" , color : "#FF6B6B" } ) ;
32
+ this . createCategory ( { name : "Shopping" , color : "#00CC99" } ) ;
33
+ }
34
+
20
35
async getTasks ( ) : Promise < Task [ ] > {
21
- return await db . select ( ) . from ( tasks ) ;
36
+ return Array . from ( this . tasks . values ( ) ) ;
22
37
}
23
38
24
39
async getTask ( id : number ) : Promise < Task | undefined > {
25
- const [ task ] = await db . select ( ) . from ( tasks ) . where ( eq ( tasks . id , id ) ) ;
26
- return task ;
40
+ return this . tasks . get ( id ) ;
27
41
}
28
42
29
43
async createTask ( insertTask : InsertTask ) : Promise < Task > {
30
- const [ task ] = await db
31
- . insert ( tasks )
32
- . values ( {
33
- ...insertTask ,
34
- dueDate : insertTask . dueDate ? new Date ( insertTask . dueDate ) : null ,
35
- } )
36
- . returning ( ) ;
44
+ const id = this . taskId ++ ;
45
+ const task : Task = { ...insertTask , id } ;
46
+ this . tasks . set ( id , task ) ;
37
47
return task ;
38
48
}
39
49
40
50
async updateTask ( id : number , updates : Partial < InsertTask > ) : Promise < Task > {
41
- const [ task ] = await db
42
- . update ( tasks )
43
- . set ( {
44
- ...updates ,
45
- dueDate : updates . dueDate ? new Date ( updates . dueDate ) : undefined ,
46
- } )
47
- . where ( eq ( tasks . id , id ) )
48
- . returning ( ) ;
51
+ const task = this . tasks . get ( id ) ;
49
52
if ( ! task ) throw new Error ( "Task not found" ) ;
50
- return task ;
53
+
54
+ const updatedTask = { ...task , ...updates } ;
55
+ this . tasks . set ( id , updatedTask ) ;
56
+ return updatedTask ;
51
57
}
52
58
53
59
async deleteTask ( id : number ) : Promise < void > {
54
- await db . delete ( tasks ) . where ( eq ( tasks . id , id ) ) ;
60
+ this . tasks . delete ( id ) ;
55
61
}
56
62
57
63
async getCategories ( ) : Promise < Category [ ] > {
58
- return await db . select ( ) . from ( categories ) ;
64
+ return Array . from ( this . categories . values ( ) ) ;
59
65
}
60
66
61
67
async createCategory ( insertCategory : InsertCategory ) : Promise < Category > {
62
- const [ category ] = await db
63
- . insert ( categories )
64
- . values ( insertCategory )
65
- . returning ( ) ;
68
+ const id = this . categoryId ++ ;
69
+ const category : Category = { ...insertCategory , id } ;
70
+ this . categories . set ( id , category ) ;
66
71
return category ;
67
72
}
68
73
69
74
async deleteCategory ( id : number ) : Promise < void > {
70
- const [ category ] = await db
71
- . select ( )
72
- . from ( categories )
73
- . where ( eq ( categories . id , id ) ) ;
74
-
75
+ const category = this . categories . get ( id ) ;
75
76
if ( ! category ) {
76
77
throw new Error ( "Category not found" ) ;
77
78
}
78
79
79
- // First update all tasks in this category to use "general"
80
- await db
81
- . update ( tasks )
82
- . set ( { category : "general" } )
83
- . where ( eq ( tasks . category , category . name ) ) ;
80
+ // Update all tasks that use this category to use "general" instead
81
+ for ( const task of this . tasks . values ( ) ) {
82
+ if ( task . category === category . name ) {
83
+ await this . updateTask ( task . id , { category : "general" } ) ;
84
+ }
85
+ }
84
86
85
- // Then delete the category
86
- await db . delete ( categories ) . where ( eq ( categories . id , id ) ) ;
87
+ this . categories . delete ( id ) ;
87
88
}
88
89
}
89
90
90
- export const storage = new DatabaseStorage ( ) ;
91
+ export const storage = new MemStorage ( ) ;
0 commit comments