From 351304ac274b7d855dafed29f2280f9240aebead Mon Sep 17 00:00:00 2001 From: Oliver Gwyther Date: Fri, 15 Aug 2025 22:46:21 +0100 Subject: [PATCH] Refactor Dockerfile to create comprehensive mock API files with TypeScript support. Enhanced mock implementations for auth, scripts, ratings, analytics, collections, and users, ensuring complete interfaces and improved functionality for frontend-only builds. --- Dockerfile | 125 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 258600a..33eb46b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,26 +48,123 @@ RUN mkdir -p src/lib/api src/lib/db RUN echo "export const db = {};" > src/lib/db/index.ts RUN echo "export const users = {}; export const scripts = {}; export const ratings = {}; export const scriptVersions = {}; export const scriptAnalytics = {}; export const scriptCollections = {}; export const collectionScripts = {};" > src/lib/db/schema.ts -# Create mock API index -RUN echo "export const generateId = () => Math.random().toString(36).substr(2, 9); export class ApiError extends Error { constructor(message, status) { super(message); this.status = status; } }" > src/lib/api/index.ts +# Create comprehensive mock API files with proper TypeScript support -# Create mock auth API -RUN echo "export const authApi = { login: async () => ({ token: 'demo', user: { id: '1', username: 'demo' } }), register: async () => ({ token: 'demo', user: { id: '1', username: 'demo' } }), changePassword: async () => ({}), refreshToken: async () => ({ token: 'demo' }) };" > src/lib/api/auth.ts +# Mock API index with proper types +RUN cat > src/lib/api/index.ts << 'EOFILE' +export const generateId = () => Math.random().toString(36).substr(2, 9); +export class ApiError extends Error { + constructor(message: string, public status: number) { + super(message); + this.status = status; + } +} +EOFILE -# Create mock scripts API -RUN echo "export const scriptsApi = { getScripts: async () => ({ scripts: [], total: 0 }), getScript: async () => null, createScript: async () => ({}), updateScript: async () => ({}), deleteScript: async () => ({}), moderateScript: async () => ({}) };" > src/lib/api/scripts.ts +# Mock auth API with complete interface +RUN cat > src/lib/api/auth.ts << 'EOFILE' +export const authApi = { + login: async (data: any) => ({ token: 'demo', user: { id: '1', username: 'demo' } }), + register: async (data: any) => ({ token: 'demo', user: { id: '1', username: 'demo' } }), + changePassword: async (data: any) => ({}), + refreshToken: async () => ({ token: 'demo' }) +}; +EOFILE -# Create mock ratings API -RUN echo "export const ratingsApi = { submitRating: async () => ({}), getUserRating: async () => null, getScriptRatingStats: async () => ({ averageRating: 0, totalRatings: 0, distribution: {} }) };" > src/lib/api/ratings.ts +# Mock scripts API with all required methods +RUN cat > src/lib/api/scripts.ts << 'EOFILE' +export interface ScriptFilters { + search?: string; + categories?: string[]; + compatibleOs?: string[]; + sortBy?: string; + limit?: number; + isApproved?: boolean; +} +export interface UpdateScriptData { + name?: string; + description?: string; + content?: string; +} +export const scriptsApi = { + getScripts: async (filters?: ScriptFilters) => ({ scripts: [], total: 0 }), + getScriptById: async (id: string) => null, + getPopularScripts: async () => [], + getRecentScripts: async () => [], + createScript: async (data: any) => ({ id: 'mock' }), + updateScript: async (id: string, data: UpdateScriptData, userId: string) => ({ id }), + deleteScript: async (id: string, userId: string) => ({}), + moderateScript: async (id: string, isApproved: boolean, moderatorId: string) => ({ id, isApproved }), + incrementViewCount: async (id: string) => ({}), + incrementDownloadCount: async (id: string) => ({}) +}; +EOFILE -# Create mock analytics API -RUN echo "export const analyticsApi = { trackEvent: async () => ({}), getAnalytics: async () => ({ views: [], downloads: [], topScripts: [], userGrowth: [] }) };" > src/lib/api/analytics.ts +# Mock ratings API with complete interface +RUN cat > src/lib/api/ratings.ts << 'EOFILE' +export const ratingsApi = { + submitRating: async (data: any) => ({ scriptId: data.scriptId }), + rateScript: async (data: any) => ({ scriptId: data.scriptId }), + getUserRating: async (scriptId: string, userId?: string) => null, + getScriptRatings: async (scriptId: string) => [], + getScriptRatingStats: async (scriptId: string) => ({ averageRating: 0, totalRatings: 0, distribution: {} }), + deleteRating: async (scriptId: string, userId: string) => ({}) +}; +EOFILE -# Create mock collections API -RUN echo "export const collectionsApi = { getCollections: async () => [], createCollection: async () => ({}), updateCollection: async () => ({}), deleteCollection: async () => ({}), addScriptToCollection: async () => ({}), removeScriptFromCollection: async () => ({}) };" > src/lib/api/collections.ts +# Mock analytics API with complete interface +RUN cat > src/lib/api/analytics.ts << 'EOFILE' +export interface AnalyticsFilters { + startDate?: Date; + endDate?: Date; +} +export const analyticsApi = { + trackEvent: async (data: any) => ({}), + getAnalytics: async () => ({ views: [], downloads: [], topScripts: [], userGrowth: [] }), + getAnalyticsEvents: async (filters?: AnalyticsFilters) => [], + getScriptAnalytics: async (scriptId: string) => ({ views: [], downloads: [] }), + getPlatformAnalytics: async () => ({ totalUsers: 0, totalScripts: 0 }), + getUserAnalytics: async (userId: string) => ({ views: [], downloads: [] }) +}; +EOFILE -# Create mock users API -RUN echo "export const usersApi = { getUser: async () => null, updateUser: async () => ({}), updateUserPermissions: async () => ({}), getAllUsers: async () => ([]), searchUsers: async () => ([]) };" > src/lib/api/users.ts +# Mock collections API with complete interface +RUN cat > src/lib/api/collections.ts << 'EOFILE' +export interface UpdateCollectionData { + name?: string; + description?: string; +} +export const collectionsApi = { + getCollections: async () => [], + getCollectionById: async (id: string) => null, + getUserCollections: async (userId: string) => [], + getPublicCollections: async () => [], + createCollection: async (data: any) => ({ id: 'mock' }), + updateCollection: async (id: string, data: UpdateCollectionData) => ({ id }), + deleteCollection: async (id: string) => ({}), + addScriptToCollection: async (collectionId: string, scriptId: string) => ({}), + removeScriptFromCollection: async (collectionId: string, scriptId: string) => ({}), + isScriptInCollection: async (collectionId: string, scriptId: string) => false +}; +EOFILE + +# Mock users API with complete interface +RUN cat > src/lib/api/users.ts << 'EOFILE' +export interface UpdateUserData { + username?: string; + displayName?: string; + bio?: string; +} +export const usersApi = { + getUser: async (id: string) => null, + getUserById: async (id: string) => null, + getAllUsers: async () => [], + searchUsers: async (query: string) => [], + createUser: async (data: any) => ({ id: 'mock' }), + updateUser: async (id: string, data: UpdateUserData) => ({ id }), + updateUserPermissions: async (id: string, permissions: any) => ({ id }) +}; +EOFILE # Build the application (frontend only with mocks) RUN npm run build