import { users, newsletters, type User, type InsertUser, type Newsletter, type InsertNewsletter } from "@shared/schema"; export interface IStorage { getUser(id: number): Promise; getUserByUsername(username: string): Promise; createUser(user: InsertUser): Promise; subscribeNewsletter(newsletter: InsertNewsletter): Promise; getNewsletterByEmail(email: string): Promise; } export class MemStorage implements IStorage { private users: Map; private newsletters: Map; private currentUserId: number; private currentNewsletterId: number; constructor() { this.users = new Map(); this.newsletters = new Map(); this.currentUserId = 1; this.currentNewsletterId = 1; } async getUser(id: number): Promise { return this.users.get(id); } async getUserByUsername(username: string): Promise { return Array.from(this.users.values()).find( (user) => user.username === username, ); } async createUser(insertUser: InsertUser): Promise { const id = this.currentUserId++; const user: User = { ...insertUser, id }; this.users.set(id, user); return user; } async subscribeNewsletter(insertNewsletter: InsertNewsletter): Promise { const existing = await this.getNewsletterByEmail(insertNewsletter.email); if (existing) { throw new Error("Email already subscribed"); } const id = this.currentNewsletterId++; const newsletter: Newsletter = { ...insertNewsletter, id, subscribedAt: new Date() }; this.newsletters.set(id, newsletter); return newsletter; } async getNewsletterByEmail(email: string): Promise { return Array.from(this.newsletters.values()).find( (newsletter) => newsletter.email === email, ); } } export const storage = new MemStorage();