UNPKG

create-mock-backend

Version:

This is npx starter package for installing your favourite backend template for mockBee.

122 lines (112 loc) 3.65 kB
import { Server, Model, RestSerializer } from "miragejs"; import { loginHandler, signupHandler, } from "./backend/controllers/AuthController"; import { getHistoryVideosHandler, addVideoToHistoryHandler, removeVideoFromHistoryHandler, clearHistoryHandler, } from "./backend/controllers/HistoryController"; import { getAllVideosHandler, getVideoHandler, } from "./backend/controllers/VideoController"; import { videos } from "./backend/db/videos"; import { categories } from "./backend/db/categories"; import { getAllCategoriesHandler, getCategoryHandler, } from "./backend/controllers/CategoryController"; import { getLikedVideosHandler, addItemToLikedVideos, removeItemFromLikedVideos, } from "./backend/controllers/LikeController"; import { getAllPlaylistsHandler, addItemToPlaylistsHandler, removeItemFromPlaylistHandler, getVideosFromPlaylistHandler, addVideoToPlaylistHandler, removeVideoFromPlaylistHandler, } from "./backend/controllers/PlaylistController"; import { users } from "./backend/db/users"; export function makeServer({ environment = "development" } = {}) { let server = new Server({ serializers: { application: RestSerializer, }, environment, // TODO: Use Relationships to have named relational Data models: { video: Model, category: Model, user: Model, like: Model, history: Model, playlist: Model, }, // Runs on the start of the server seeds(server) { videos.forEach((item) => { server.create("video", { ...item }); }); categories.forEach((item) => server.create("category", { ...item })); users.forEach((item) => server.create("user", { ...item, likes: [], playlists: [], history: [], }) ); }, routes() { this.namespace = "api"; // auth routes (public) this.post("/auth/signup", signupHandler.bind(this)); this.post("/auth/login", loginHandler.bind(this)); // video routes (public) this.get("/videos", getAllVideosHandler.bind(this)); this.get("video/:videoId", getVideoHandler); // TODO: POST VIDEO TO DB // categories routes (public) this.get("/categories", getAllCategoriesHandler.bind(this)); this.get("/categories/:categoryId", getCategoryHandler.bind(this)); // likes routes (private) this.get("/user/likes", getLikedVideosHandler.bind(this)); this.post("/user/likes", addItemToLikedVideos.bind(this)); this.delete("/user/likes/:videoId", removeItemFromLikedVideos.bind(this)); // playlist routes (private) this.get("/user/playlists", getAllPlaylistsHandler.bind(this)); this.post("/user/playlists", addItemToPlaylistsHandler.bind(this)); this.delete( "/user/playlists/:playlistId", removeItemFromPlaylistHandler.bind(this) ); this.get( "/user/playlists/:playlistId", getVideosFromPlaylistHandler.bind(this) ); this.post( "/user/playlists/:playlistId", addVideoToPlaylistHandler.bind(this) ); this.delete( "/user/playlists/:playlistId/:videoId", removeVideoFromPlaylistHandler.bind(this) ); // history routes (private) this.get("/user/history", getHistoryVideosHandler.bind(this)); this.post("/user/history", addVideoToHistoryHandler.bind(this)); this.delete( "/user/history/:videoId", removeVideoFromHistoryHandler.bind(this) ); this.delete("/user/history/all", clearHistoryHandler.bind(this)); }, }); return server; }