{"id":19901238,"url":"https://github.com/vbrazhnik/movie-catalog","last_synced_at":"2026-04-07T18:31:27.158Z","repository":{"id":220985374,"uuid":"169037888","full_name":"VBrazhnik/Movie-Catalog","owner":"VBrazhnik","description":"Movie Catalog [MERN stack]","archived":false,"fork":false,"pushed_at":"2019-02-11T21:34:26.000Z","size":1258,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-03T11:31:06.972Z","etag":null,"topics":["express-js","mern-stack","mongodb","movie-catalog","movies-api","node-js","react-js","restful-api"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VBrazhnik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-02-04T06:42:57.000Z","updated_at":"2022-02-16T08:23:52.000Z","dependencies_parsed_at":"2024-02-12T01:30:19.244Z","dependency_job_id":null,"html_url":"https://github.com/VBrazhnik/Movie-Catalog","commit_stats":null,"previous_names":["vbrazhnik/movie-catalog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VBrazhnik/Movie-Catalog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VBrazhnik%2FMovie-Catalog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VBrazhnik%2FMovie-Catalog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VBrazhnik%2FMovie-Catalog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VBrazhnik%2FMovie-Catalog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VBrazhnik","download_url":"https://codeload.github.com/VBrazhnik/Movie-Catalog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VBrazhnik%2FMovie-Catalog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31524524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express-js","mern-stack","mongodb","movie-catalog","movies-api","node-js","react-js","restful-api"],"created_at":"2024-11-12T20:14:27.069Z","updated_at":"2026-04-07T18:31:27.129Z","avatar_url":"https://github.com/VBrazhnik.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Movie Catalog\n\nMovie Catalog was developed using MongoDB, Express.js, React.js and Node.js.\n\n![Movie Catalog Header](images/movie-catalog-header.svg)\n\n## Installation\n\nClone repository and install node modules:\n\n```\n$ git clone \u003crepository url\u003e \u003cfolder name\u003e\n$ cd \u003cfolder name\u003e/client\n$ npm i\n$ cd ../server\n$ npm i\n```\n\n## Configuration\n\nYou have to modify a few files for your environment.\n\nAt first, you have to modify `server/config/default.json`.\n\nAnd maybe you have to modify the following line in `client/package.json`:\n\n```\n\"proxy\": \"http://localhost:5000\"\n```\n\n## Execution\n\nRun server-side and client-side parts of the project:\n\n```\n$ cd server\n$ npm start\n```\n\nIf you want to display debug-messages, set environment variable `DEBUG`:\n\n```\n$ DEBUG=app:* npm start\n```\n\n## Testing\n\nYou can run a few tests for server-side part of the project.\n\nTests are located in `server/test` folder. You can run them with the following command:\n\n```\n$ npm test\n```\n\n## Movie\n\n### Structure\n\nField|Data Type|Required|Restrictions\n:-----|:-----|:-----|:-----\n`title`|String|Required|No longer than 100 characters\n`year`|Number|Required|No less than 1800 and no more than 3000\n`format`|String|Required|`VHS` or `DVD` or `Blu-Ray`\n`stars`|Array of Strings|Required|Each string is no longer than 100 characters and at least one string must be present\n\n### Schema\n\n```\nconst Movie = new mongoose.model('Movie', new mongoose.Schema({\n    title: {\n        type: String,\n        required: true,\n        maxlength: 100\n    },\n    year: {\n        type: Number,\n        required: true,\n        min: 1800,\n        max: 3000\n    },\n    format:  {\n        type: String,\n        required: true,\n        enum: formats\n    },\n    stars: {\n        type: [{\n            type: String,\n            maxlength: 100\n        }],\n        required: true\n    }\n}));\n```\n\n### Server-Side Data Validation\n\nJoi module is used to validate data on the server.\n\n```\nconst validate = (movie) =\u003e {\n    const schema = {\n        title: Joi.string().max(100).required(),\n        year: Joi.number().min(1800).max(3000).required(),\n        format: Joi.string().valid(formats).required(),\n        stars: Joi.array().items(Joi.string().max(100)).min(1).required()\n    };\n\n    return (Joi.validate(movie, schema));\n};\n```\n\n### Client-Side Data Validation\n\nForm validation is used to validate input on the client-side.\n\n![Form Validation](images/movie-catalog-form-validation.png)\n\n## Architecture\n\n### Server\n\nExpress.js is used for handling http-requests.\n\nMongoose is used for work with MongoDB.\n\n#### RESTful API\n\nURL|HTTP Method|Body of Request|Response\n:-----|:-----|:-----|:-----\n`/api/movies`|`GET`|—|All movies\n`/api/movies?title=\u003ctitle\u003e`|`GET`|—|All movies that match `\u003ctitle\u003e`\n`/api/movies?star=\u003cstar\u003e`|`GET`|—|All movies which stars list contains `\u003cstar\u003e`\n`/api/movies`|`POST`|JSON|Created movie\n`/api/movies/upload`|`POST`|File|All created movies\n`/api/movies/:id`|`DELETE`|—|Deleted movie\n\n### Client\n\nReact.js, Redux and Bootstrap are used to create client-side part of Movie Catalog.\n\n![Movie Catalog](images/movie-catalog.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbrazhnik%2Fmovie-catalog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvbrazhnik%2Fmovie-catalog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvbrazhnik%2Fmovie-catalog/lists"}