diff --git a/README.md b/README.md index 9429c9dfaa29b44dec43b7c5936e5d6ea6b888d0..d478035d6db6c929c55fb01793a627b18cf2a3c1 100644 --- a/README.md +++ b/README.md @@ -63,12 +63,12 @@ To login to Adminer in your browser you need to specify: | requirement |endpoint | method | criteria | | ------------- | ------------- | ------------- | ------------- | -| Search for a movie | /movies | get | returns array of movies as a result of search -| Show a single movie | /movie/:id | get | return movie -| Show popular movies | /movie/preview | get | returns array of few movies (popular) to preview -| Show a single director | /director/:id | get | returns director +| Show all movies | /movies | get | returns array of movies as a result of search +| Show most recent movies | /movies?mostRecentCnt=$COUNT | get | returns array of $COUNT most recent movies +| Show a single movie | /movies/:id | get | returns movie +| Show a single director | /directors/:id | get | returns director | Show categories to browse | /categories | get | returns all categories -| Show a single category | /category/:id | get | returns category with movies that belong to it +| Show a single category | /categories/:id | get | returns category with movies that belong to it ## TODO diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index b9aada61a79eb6224475099eed969af5cbd835c4..557cd3109b0316002442dacad48565eb5ea6130e 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -27,10 +27,8 @@ module.exports = { '@typescript-eslint/comma-spacing': ['error', { 'before': false, 'after': true }], '@typescript-eslint/default-param-last': ['error'], '@typescript-eslint/dot-notation': ['error'], - '@typescript-eslint/indent': ['error', 2], '@typescript-eslint/keyword-spacing': ['error', { 'before': true, 'after': true }], '@typescript-eslint/no-empty-function': ['error'], - '@typescript-eslint/no-extra-parens': ['error'], '@typescript-eslint/no-extra-semi': ['error'], '@typescript-eslint/no-shadow': ['error'], '@typescript-eslint/no-unused-expressions': ['error'], @@ -80,6 +78,8 @@ module.exports = { 'comma-spacing': 'off', 'comma-style': ['error', 'last'], 'func-call-spacing': ['error', 'never'], + 'function-call-argument-newline': ['error', 'consistent'], + 'function-paren-newline': ['error', 'consistent'], 'implicit-arrow-linebreak': ['error', 'beside'], 'indent': 'off', 'jsx-quotes': ['error', 'prefer-single'], diff --git a/backend/Dockerfile b/backend/Dockerfile index 8a7677e8a56c23cec88f6d8e5ebeaa8e86ed6933..5b2683ad45392ab543ca436b8fb90dd758a1b48a 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -8,6 +8,9 @@ ENV PATH=/usr/src/node_modules/.bin:$PATH WORKDIR /usr/src/app +COPY prisma/schema.prisma ./prisma/ +RUN npx prisma generate + COPY . . CMD ["npm", "run", "build"] diff --git a/backend/diagrams/movie_database.png b/backend/diagrams/movie_database.png deleted file mode 100644 index a905d5c99060ad2ab6e1083f8718a4b16ad78026..0000000000000000000000000000000000000000 Binary files a/backend/diagrams/movie_database.png and /dev/null differ diff --git a/backend/nest-cli.json b/backend/nest-cli.json index 256648114a9983377debfde44bda4368fb045a39..fb0d691671cf0b5047c5f0b7a66255f7d63480ca 100644 --- a/backend/nest-cli.json +++ b/backend/nest-cli.json @@ -1,5 +1,8 @@ { "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", - "sourceRoot": "src" + "sourceRoot": "src", + "compilerOptions": { + "plugins": ["@nestjs/swagger"] + } } diff --git a/backend/package-lock.json b/backend/package-lock.json index 5e9d492bbacf6bc20b17cc08169e94590c20224d..c2e3950d45a36017b34ab1117a0ea1b9805800f5 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -12,12 +12,17 @@ "@nestjs/common": "^8.0.0", "@nestjs/config": "^2.1.0", "@nestjs/core": "^8.0.0", + "@nestjs/mapped-types": "^1.0.1", "@nestjs/platform-express": "^8.0.0", - "@prisma/client": "^3.15.1", + "@nestjs/swagger": "^5.2.1", + "@prisma/client": "^3.15.2", + "class-transformer": "^0.4.0", + "class-validator": "^0.13.1", "jshint": "^2.13.4", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "swagger-ui-express": "^4.4.0" }, "devDependencies": { "@nestjs/cli": "^8.0.0", @@ -34,7 +39,7 @@ "eslint-plugin-prettier": "^4.0.0", "jest": "28.0.3", "prettier": "^2.3.2", - "prisma": "^3.15.1", + "prisma": "^3.15.2", "source-map-support": "^0.5.20", "supertest": "^6.1.3", "ts-jest": "28.0.1", @@ -1598,6 +1603,25 @@ } } }, + "node_modules/@nestjs/mapped-types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.1.tgz", + "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==", + "peerDependencies": { + "@nestjs/common": "^7.0.8 || ^8.0.0", + "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/platform-express": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.6.tgz", @@ -1634,6 +1658,31 @@ "typescript": "^3.4.5 || ^4.3.5" } }, + "node_modules/@nestjs/swagger": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.2.1.tgz", + "integrity": "sha512-7dNa08WCnTsW/oAk3Ujde+z64JMfNm19DhpXasFR8oJp/9pggYAbYU927HpA+GJsSFJX6adjIRZsCKUqaGWznw==", + "dependencies": { + "@nestjs/mapped-types": "1.0.1", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0", + "@nestjs/core": "^8.0.0", + "fastify-swagger": "*", + "reflect-metadata": "^0.1.12", + "swagger-ui-express": "*" + }, + "peerDependenciesMeta": { + "fastify-swagger": { + "optional": true + }, + "swagger-ui-express": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-8.4.6.tgz", @@ -1729,9 +1778,9 @@ } }, "node_modules/@prisma/client": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.1.tgz", - "integrity": "sha512-Lsk7oupvO9g99mrIs07iE6BIMouHs46Yq/YY8itTsUQNKfecsPuZvVYvcKci0pqRQ0neOpvIvoA/ouZmIMBCrQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz", + "integrity": "sha512-ErqtwhX12ubPhU4d++30uFY/rPcyvjk+mdifaZO5SeM21zS3t4jQrscy8+6IyB0GIYshl5ldTq6JSBo1d63i8w==", "hasInstallScript": true, "dependencies": { "@prisma/engines-version": "3.15.1-1.461d6a05159055555eb7dfb337c9fb271cbd4d7e" @@ -3066,6 +3115,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/class-transformer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz", + "integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA==" + }, + "node_modules/class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "dependencies": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -6430,6 +6493,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz", + "integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -7187,9 +7255,9 @@ } }, "node_modules/prisma": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.15.1.tgz", - "integrity": "sha512-MLO3JUGJpe5+EVisA/i47+zlyF8Ug0ivvGYG4B9oSXQcPiUHB1ccmnpxqR7o0Up5SQgmxkBiEU//HgR6UuIKOw==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.15.2.tgz", + "integrity": "sha512-nMNSMZvtwrvoEQ/mui8L/aiCLZRCj5t6L3yujKpcDhIPk7garp8tL4nMx2+oYsN0FWBacevJhazfXAbV1kfBzA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -8012,6 +8080,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.12.0.tgz", + "integrity": "sha512-B0Iy2ueXtbByE6OOyHTi3lFQkpPi/L7kFOKFeKTr44za7dJIELa9kzaca6GkndCgpK1QTjArnoXG+aUy0XQp1w==" + }, + "node_modules/swagger-ui-express": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.4.0.tgz", + "integrity": "sha512-1CzRkHG386VQMVZK406jcpgnW2a9A5A/NiAjKhsFTQqUBWRF+uGbXTU/mA7WSV3mTzyOQDvjBdWP/c2qd5lqKw==", + "dependencies": { + "swagger-ui-dist": ">=4.11.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -8589,6 +8676,14 @@ "node": ">=10.12.0" } }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -10088,6 +10183,12 @@ "uuid": "8.3.2" } }, + "@nestjs/mapped-types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.1.tgz", + "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==", + "requires": {} + }, "@nestjs/platform-express": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.6.tgz", @@ -10113,6 +10214,16 @@ "pluralize": "8.0.0" } }, + "@nestjs/swagger": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.2.1.tgz", + "integrity": "sha512-7dNa08WCnTsW/oAk3Ujde+z64JMfNm19DhpXasFR8oJp/9pggYAbYU927HpA+GJsSFJX6adjIRZsCKUqaGWznw==", + "requires": { + "@nestjs/mapped-types": "1.0.1", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0" + } + }, "@nestjs/testing": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-8.4.6.tgz", @@ -10170,9 +10281,9 @@ } }, "@prisma/client": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.1.tgz", - "integrity": "sha512-Lsk7oupvO9g99mrIs07iE6BIMouHs46Yq/YY8itTsUQNKfecsPuZvVYvcKci0pqRQ0neOpvIvoA/ouZmIMBCrQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz", + "integrity": "sha512-ErqtwhX12ubPhU4d++30uFY/rPcyvjk+mdifaZO5SeM21zS3t4jQrscy8+6IyB0GIYshl5ldTq6JSBo1d63i8w==", "requires": { "@prisma/engines-version": "3.15.1-1.461d6a05159055555eb7dfb337c9fb271cbd4d7e" } @@ -11223,6 +11334,20 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "class-transformer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz", + "integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA==" + }, + "class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "requires": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -13786,6 +13911,11 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz", + "integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -14338,9 +14468,9 @@ } }, "prisma": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.15.1.tgz", - "integrity": "sha512-MLO3JUGJpe5+EVisA/i47+zlyF8Ug0ivvGYG4B9oSXQcPiUHB1ccmnpxqR7o0Up5SQgmxkBiEU//HgR6UuIKOw==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.15.2.tgz", + "integrity": "sha512-nMNSMZvtwrvoEQ/mui8L/aiCLZRCj5t6L3yujKpcDhIPk7garp8tL4nMx2+oYsN0FWBacevJhazfXAbV1kfBzA==", "devOptional": true, "requires": { "@prisma/engines": "3.15.1-1.461d6a05159055555eb7dfb337c9fb271cbd4d7e" @@ -14945,6 +15075,19 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "swagger-ui-dist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.12.0.tgz", + "integrity": "sha512-B0Iy2ueXtbByE6OOyHTi3lFQkpPi/L7kFOKFeKTr44za7dJIELa9kzaca6GkndCgpK1QTjArnoXG+aUy0XQp1w==" + }, + "swagger-ui-express": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.4.0.tgz", + "integrity": "sha512-1CzRkHG386VQMVZK406jcpgnW2a9A5A/NiAjKhsFTQqUBWRF+uGbXTU/mA7WSV3mTzyOQDvjBdWP/c2qd5lqKw==", + "requires": { + "swagger-ui-dist": ">=4.11.0" + } + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -15348,6 +15491,11 @@ "convert-source-map": "^1.6.0" } }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/backend/package.json b/backend/package.json index 36e70e70cf2424848c3337945fe3ea118be15533..1b1219a54bcd938e4db24e0f08c553ed83a2e659 100644 --- a/backend/package.json +++ b/backend/package.json @@ -24,12 +24,17 @@ "@nestjs/common": "^8.0.0", "@nestjs/config": "^2.1.0", "@nestjs/core": "^8.0.0", + "@nestjs/mapped-types": "^1.0.1", "@nestjs/platform-express": "^8.0.0", - "@prisma/client": "^3.15.1", + "@nestjs/swagger": "^5.2.1", + "@prisma/client": "^3.15.2", + "class-transformer": "^0.4.0", + "class-validator": "^0.13.1", "jshint": "^2.13.4", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "swagger-ui-express": "^4.4.0" }, "devDependencies": { "@nestjs/cli": "^8.0.0", @@ -46,7 +51,7 @@ "eslint-plugin-prettier": "^4.0.0", "jest": "28.0.3", "prettier": "^2.3.2", - "prisma": "^3.15.1", + "prisma": "^3.15.2", "source-map-support": "^0.5.20", "supertest": "^6.1.3", "ts-jest": "28.0.1", diff --git a/backend/prisma/diagrams/movie_database.png b/backend/prisma/diagrams/movie_database.png new file mode 100644 index 0000000000000000000000000000000000000000..e94eddb5c1bb380bb6699bd0ae9365013e26e152 Binary files /dev/null and b/backend/prisma/diagrams/movie_database.png differ diff --git a/backend/diagrams/movie_database.puml b/backend/prisma/diagrams/movie_database.puml similarity index 78% rename from backend/diagrams/movie_database.puml rename to backend/prisma/diagrams/movie_database.puml index 44d03cdc4747120e11f7b63121606e60f6fdb817..e063d0a9f19af71d8d66278fe1f7c3cf11cfc73b 100644 --- a/backend/diagrams/movie_database.puml +++ b/backend/prisma/diagrams/movie_database.puml @@ -2,13 +2,12 @@ entity Movie { * id <<UUID>> - * id_director <<UUID>> --- * name: String * originalName: String * intro: String - * picture: String - * published: Date + picture: String + * publishedAt: Number * runTimeMinutes: Number } @@ -20,8 +19,6 @@ entity Category { entity MovieCategory { * id <<UUID>> - * id_movie <<UUID>> - * id_category <<UUID>> --- } @@ -30,7 +27,7 @@ entity Director { --- * name: String * surname: String - * birthDate: Date + birthDate: Date } Movie }|...|| Director diff --git a/backend/prisma/migrations/20220617021322_init/migration.sql b/backend/prisma/migrations/20220617021322_init/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..2a38dfecbe1674c5ffe2a1aa05ece6da94e7bef6 --- /dev/null +++ b/backend/prisma/migrations/20220617021322_init/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - Changed the type of `publishedAt` on the `Movie` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required. + +*/ +-- AlterTable +ALTER TABLE "Movie" DROP COLUMN "publishedAt", +ADD COLUMN "publishedAt" INTEGER NOT NULL; + +-- CreateIndex +CREATE UNIQUE INDEX "Movie_originalName_publishedAt_directorId_key" ON "Movie"("originalName", "publishedAt", "directorId"); diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index b81dd6653c87cb22fc310158dcadf4ee00067497..3c00fd7d5dc85cbd9e8eba38f6a60f34abf97e96 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -20,7 +20,7 @@ model Movie { originalName String intro String picture String? - publishedAt DateTime + publishedAt Int runTimeMinutes Int director Director @relation(fields: [directorId], references: [id]) diff --git a/backend/src/api/categories/categories.controller.spec.ts b/backend/src/api/categories/categories.controller.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..66257decefec984d389a9b4515d567cdf9477ddc --- /dev/null +++ b/backend/src/api/categories/categories.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CategoriesController } from './categories.controller'; +import { CategoriesService } from './categories.service'; + +describe('CategoriesController', () => { + let controller: CategoriesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CategoriesController], + providers: [CategoriesService], + }).compile(); + + controller = module.get<CategoriesController>(CategoriesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/api/categories/categories.controller.ts b/backend/src/api/categories/categories.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..340f531ce7eb24064beee3fd64e1757b28a5f838 --- /dev/null +++ b/backend/src/api/categories/categories.controller.ts @@ -0,0 +1,50 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, +} from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { CategoriesService } from './categories.service'; +import { CreateCategoryDto } from './dto/create-category.dto'; +import { UpdateCategoryDto } from './dto/update-category.dto'; +import { CategoryEntity } from './entities/category.entity'; + +@ApiTags('categories') +@Controller('categories') +export class CategoriesController { + constructor(private readonly categoriesService: CategoriesService) {} + + @Post() + async create( + @Body() createCategoryDto: CreateCategoryDto, + ): Promise<CategoryEntity> { + return await this.categoriesService.create(createCategoryDto); + } + + @Get() + async findAll(): Promise<CategoryEntity[]> { + return await this.categoriesService.findAll(); + } + + @Get(':id') + async findOne(@Param('id') id: string): Promise<CategoryEntity> { + return await this.categoriesService.findOne(id); + } + + @Patch(':id') + async update( + @Param('id') id: string, + @Body() updateCategoryDto: UpdateCategoryDto, + ): Promise<CategoryEntity> { + return await this.categoriesService.update(id, updateCategoryDto); + } + + @Delete(':id') + async remove(@Param('id') id: string): Promise<CategoryEntity> { + return await this.categoriesService.remove(id); + } +} diff --git a/backend/src/api/categories/categories.module.ts b/backend/src/api/categories/categories.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..387eaab9859455fbfa60c70311266582505dad60 --- /dev/null +++ b/backend/src/api/categories/categories.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { CategoriesService } from './categories.service'; +import { CategoriesController } from './categories.controller'; +import { PrismaService } from 'src/prisma/prisma.service'; + +@Module({ + controllers: [CategoriesController], + providers: [CategoriesService, PrismaService], +}) +export class CategoriesModule {} diff --git a/backend/src/api/categories/categories.service.spec.ts b/backend/src/api/categories/categories.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9095d781e293688a268f41b4b272372c6a455636 --- /dev/null +++ b/backend/src/api/categories/categories.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CategoriesService } from './categories.service'; + +describe('CategoriesService', () => { + let service: CategoriesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CategoriesService], + }).compile(); + + service = module.get<CategoriesService>(CategoriesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/api/categories/categories.service.ts b/backend/src/api/categories/categories.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..70c0a71741e80abd0aef7ed61a5e5f092fcd8c9a --- /dev/null +++ b/backend/src/api/categories/categories.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@nestjs/common'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { CreateCategoryDto } from './dto/create-category.dto'; +import { UpdateCategoryDto } from './dto/update-category.dto'; +import { plainToClass } from 'class-transformer'; +import { CategoryEntity } from './entities/category.entity'; +import { Category } from '@prisma/client'; + +@Injectable() +export class CategoriesService { + constructor(private prisma: PrismaService) {} + + async create(createCategoryDto: CreateCategoryDto): Promise<Category> { + const category = plainToClass(CategoryEntity, createCategoryDto); + return await this.prisma.category.create({ + data: category, + }); + } + + async findAll(): Promise<Category[]> { + return await this.prisma.category.findMany(); + } + + async findOne(id: string): Promise<Category> { + return await this.prisma.category.findUnique({ + where: { + id, + }, + }); + } + + async update( + id: string, + updateCategoryDto: UpdateCategoryDto, + ): Promise<Category> { + const updatedCategory = { + ...(await this.findOne(id)), + ...plainToClass(CategoryEntity, updateCategoryDto), + }; + return await this.prisma.category.update({ + where: { + id, + }, + data: { + ...updatedCategory, + }, + }); + } + + async remove(id: string): Promise<Category> { + return await this.prisma.category.update({ + where: { + id, + }, + data: { + deletedAt: new Date(), + }, + }); + } +} diff --git a/backend/src/api/categories/dto/create-category.dto.ts b/backend/src/api/categories/dto/create-category.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..8e07b4c5da81ea91e09795e1eb75c7c52c2032e6 --- /dev/null +++ b/backend/src/api/categories/dto/create-category.dto.ts @@ -0,0 +1,7 @@ +import { IsNotEmpty, IsString } from 'class-validator'; + +export class CreateCategoryDto { + @IsNotEmpty() + @IsString() + readonly name: string; +} diff --git a/backend/src/api/categories/dto/update-category.dto.ts b/backend/src/api/categories/dto/update-category.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..d713b9b900cd1d580baedbf636a1dd8470c04296 --- /dev/null +++ b/backend/src/api/categories/dto/update-category.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateCategoryDto } from './create-category.dto'; + +export class UpdateCategoryDto extends PartialType(CreateCategoryDto) {} diff --git a/backend/src/api/categories/entities/category.entity.ts b/backend/src/api/categories/entities/category.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..63dead54ca6c30c9e930044191ac05b31ef1d5d8 --- /dev/null +++ b/backend/src/api/categories/entities/category.entity.ts @@ -0,0 +1,17 @@ +import { ApiHideProperty } from '@nestjs/swagger'; +import { Category } from '@prisma/client'; + +export class CategoryEntity implements Category { + id: string; + + @ApiHideProperty() + createdAt: Date; + + @ApiHideProperty() + updatedAt: Date; + + @ApiHideProperty() + deletedAt: Date; + + name: string; +} diff --git a/backend/src/api/directors/directors.controller.spec.ts b/backend/src/api/directors/directors.controller.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..b8d105a47442f05bb3d10c8c60e74585e584b9bd --- /dev/null +++ b/backend/src/api/directors/directors.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { DirectorsController } from './directors.controller'; +import { DirectorsService } from './directors.service'; + +describe('DirectorsController', () => { + let controller: DirectorsController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [DirectorsController], + providers: [DirectorsService], + }).compile(); + + controller = module.get<DirectorsController>(DirectorsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/api/directors/directors.controller.ts b/backend/src/api/directors/directors.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa4b739b35c995cea0674cdae3c9c38c3d500bf6 --- /dev/null +++ b/backend/src/api/directors/directors.controller.ts @@ -0,0 +1,50 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, +} from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; +import { DirectorsService } from './directors.service'; +import { CreateDirectorDto } from './dto/create-director.dto'; +import { UpdateDirectorDto } from './dto/update-director.dto'; +import { DirectorEntity } from './entities/director.entity'; + +@ApiTags('directors') +@Controller('directors') +export class DirectorsController { + constructor(private readonly directorsService: DirectorsService) {} + + @Post() + async create( + @Body() createDirectorDto: CreateDirectorDto, + ): Promise<DirectorEntity> { + return await this.directorsService.create(createDirectorDto); + } + + @Get() + async findAll(): Promise<DirectorEntity[]> { + return await this.directorsService.findAll(); + } + + @Get(':id') + async findOne(@Param('id') id: string): Promise<DirectorEntity> { + return await this.directorsService.findOne(id); + } + + @Patch(':id') + async update( + @Param('id') id: string, + @Body() updateDirectorDto: UpdateDirectorDto, + ): Promise<DirectorEntity> { + return await this.directorsService.update(id, updateDirectorDto); + } + + @Delete(':id') + async remove(@Param('id') id: string): Promise<DirectorEntity> { + return await this.directorsService.remove(id); + } +} diff --git a/backend/src/api/directors/directors.module.ts b/backend/src/api/directors/directors.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..040e16ccd7193a86c1892f91607042ffa1e29499 --- /dev/null +++ b/backend/src/api/directors/directors.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { DirectorsService } from './directors.service'; +import { DirectorsController } from './directors.controller'; +import { PrismaService } from '../../prisma/prisma.service'; + +@Module({ + controllers: [DirectorsController], + providers: [DirectorsService, PrismaService], +}) +export class DirectorsModule {} diff --git a/backend/src/api/directors/directors.service.spec.ts b/backend/src/api/directors/directors.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..06fc8bf8cf4e1fe65108251d69d3d902e22d3166 --- /dev/null +++ b/backend/src/api/directors/directors.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { DirectorsService } from './directors.service'; + +describe('DirectorsService', () => { + let service: DirectorsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [DirectorsService], + }).compile(); + + service = module.get<DirectorsService>(DirectorsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/api/directors/directors.service.ts b/backend/src/api/directors/directors.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a93ed076e514f267892e10fb95d503fa47772be3 --- /dev/null +++ b/backend/src/api/directors/directors.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@nestjs/common'; +import { CreateDirectorDto } from './dto/create-director.dto'; +import { UpdateDirectorDto } from './dto/update-director.dto'; +import { PrismaService } from '../../prisma/prisma.service'; +import { plainToClass } from 'class-transformer'; +import { DirectorEntity } from './entities/director.entity'; +import { Director } from '@prisma/client'; + +@Injectable() +export class DirectorsService { + constructor(private prisma: PrismaService) {} + + async create(createDirectorDto: CreateDirectorDto): Promise<Director> { + const director = plainToClass(DirectorEntity, createDirectorDto); + return await this.prisma.director.create({ + data: director, + }); + } + + async findAll(): Promise<Director[]> { + return await this.prisma.director.findMany(); + } + + async findOne(id: string): Promise<Director> { + return await this.prisma.director.findUnique({ + where: { + id, + }, + }); + } + + async update( + id: string, + updateDirectorDto: UpdateDirectorDto, + ): Promise<Director> { + const updatedDirector = { + ...(await this.findOne(id)), + ...plainToClass(DirectorEntity, updateDirectorDto), + }; + return await this.prisma.director.update({ + where: { + id, + }, + data: { + ...updatedDirector, + }, + }); + } + + async remove(id: string): Promise<Director> { + const directorMovie = await this.prisma.movie.findFirst({ + where: { + directorId: id, + deletedAt: null, + }, + select: { + id: true, + }, + }); + + if (directorMovie === undefined) { + return await this.prisma.director.update({ + where: { + id, + }, + data: { + deletedAt: new Date(), + }, + }); + } + + return await this.findOne(id); + } +} diff --git a/backend/src/api/directors/dto/create-director.dto.ts b/backend/src/api/directors/dto/create-director.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..35a268cb9eb49fd8307ee99323035f4472a1c8db --- /dev/null +++ b/backend/src/api/directors/dto/create-director.dto.ts @@ -0,0 +1,23 @@ +import { + IsDate, + IsNotEmpty, + IsOptional, + IsString, + MaxDate, +} from 'class-validator'; + +export class CreateDirectorDto { + @IsNotEmpty() + @IsString() + readonly name: string; + + @IsNotEmpty() + @IsString() + readonly surname: string; + + @IsNotEmpty() + @IsDate() + @IsOptional() + @MaxDate(new Date()) + readonly birthDate?: Date; +} diff --git a/backend/src/api/directors/dto/update-director.dto.ts b/backend/src/api/directors/dto/update-director.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..7e889b5d8b63e29041c47c691d7d33170ff6d892 --- /dev/null +++ b/backend/src/api/directors/dto/update-director.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateDirectorDto } from './create-director.dto'; + +export class UpdateDirectorDto extends PartialType(CreateDirectorDto) {} diff --git a/backend/src/api/directors/entities/director.entity.ts b/backend/src/api/directors/entities/director.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..b5af053c2606c4c526a5c5d1f9145431c859efe1 --- /dev/null +++ b/backend/src/api/directors/entities/director.entity.ts @@ -0,0 +1,21 @@ +import { ApiHideProperty } from '@nestjs/swagger'; +import { Director } from '@prisma/client'; + +export class DirectorEntity implements Director { + id: string; + + @ApiHideProperty() + createdAt: Date; + + @ApiHideProperty() + updatedAt: Date; + + @ApiHideProperty() + deletedAt: Date; + + name: string; + + surname: string; + + birthDate: Date | null; +} diff --git a/backend/src/api/movies/dto/create-movie.dto.ts b/backend/src/api/movies/dto/create-movie.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..731e3fbb671a4b371bb3c0833921761a53ef9410 --- /dev/null +++ b/backend/src/api/movies/dto/create-movie.dto.ts @@ -0,0 +1,40 @@ +import { + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + Min, +} from 'class-validator'; + +export class CreateMovieDto { + @IsNotEmpty() + @IsString() + readonly name: string; + + @IsNotEmpty() + @IsString() + readonly originalName: string; + + @IsNotEmpty() + @IsString() + readonly intro: string; + + @IsNotEmpty() + @IsOptional() + @IsString() + readonly picture?: string; + + @IsNotEmpty() + @IsNumber() + @Min(1878) + readonly publishedAt: number; + + @IsNotEmpty() + @IsString() + readonly directorId: string; + + @IsNotEmpty() + @IsNumber() + @Min(1) + readonly runTimeMinutes: number; +} diff --git a/backend/src/api/movies/dto/update-movie.dto.ts b/backend/src/api/movies/dto/update-movie.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..7efc78d96dd65a58e2f5dead6e2ef74d188c2074 --- /dev/null +++ b/backend/src/api/movies/dto/update-movie.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateMovieDto } from './create-movie.dto'; + +export class UpdateMovieDto extends PartialType(CreateMovieDto) {} diff --git a/backend/src/api/movies/entities/movie.entity.ts b/backend/src/api/movies/entities/movie.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..d3d55e1534351e6c1994e0cc2231c316813c2ba8 --- /dev/null +++ b/backend/src/api/movies/entities/movie.entity.ts @@ -0,0 +1,29 @@ +import { ApiHideProperty } from '@nestjs/swagger'; +import { Movie } from '@prisma/client'; + +export class MovieEntity implements Movie { + id: string; + + @ApiHideProperty() + createdAt: Date; + + @ApiHideProperty() + updatedAt: Date; + + @ApiHideProperty() + deletedAt: Date; + + name: string; + + originalName: string; + + intro: string; + + picture: string | null; + + publishedAt: number; + + runTimeMinutes: number; + + directorId: string; +} diff --git a/backend/src/api/movies/movies.controller.spec.ts b/backend/src/api/movies/movies.controller.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdc5c039896bd3052f3ec9cf3c218f86cb4614c8 --- /dev/null +++ b/backend/src/api/movies/movies.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MoviesController } from './movies.controller'; +import { MoviesService } from './movies.service'; + +describe('MoviesController', () => { + let controller: MoviesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [MoviesController], + providers: [MoviesService], + }).compile(); + + controller = module.get<MoviesController>(MoviesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/api/movies/movies.controller.ts b/backend/src/api/movies/movies.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d6f8929d3d57878f39a9f8e488e77258f741082 --- /dev/null +++ b/backend/src/api/movies/movies.controller.ts @@ -0,0 +1,63 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + Query, + ParseIntPipe, +} from '@nestjs/common'; +import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; +import { MoviesService } from './movies.service'; +import { CreateMovieDto } from './dto/create-movie.dto'; +import { UpdateMovieDto } from './dto/update-movie.dto'; +import { MovieEntity } from './entities/movie.entity'; + +@ApiTags('movies') +@Controller('movies') +export class MoviesController { + constructor(private readonly moviesService: MoviesService) {} + + @Post() + async create(@Body() createMovieDto: CreateMovieDto): Promise<MovieEntity> { + return await this.moviesService.create(createMovieDto); + } + + @Get() + @ApiQuery({ + name: 'mostRecentCnt', + required: false, + }) + async findAll(@Query('mostRecentCnt', ParseIntPipe) mostRecentCnt?: number): Promise<MovieEntity[]> { + return await this.moviesService.findAll(mostRecentCnt); + } + + @Get(':id') + async findOne(@Param('id') id: string): Promise<MovieEntity> { + return await this.moviesService.findOne(id); + } + + @Patch(':id/:categoryName') + @ApiOperation({ summary: 'Add category to a movie' }) + async addCategory( + @Param('id') id: string, + @Param('categoryName') categoryName: string, + ): Promise<MovieEntity> { + return await this.moviesService.addCategory(id, categoryName); + } + + @Patch(':id') + async update( + @Param('id') id: string, + @Body() updateMovieDto: UpdateMovieDto, + ): Promise<MovieEntity> { + return await this.moviesService.update(id, updateMovieDto); + } + + @Delete(':id') + async remove(@Param('id') id: string): Promise<MovieEntity> { + return await this.moviesService.remove(id); + } +} diff --git a/backend/src/api/movies/movies.module.ts b/backend/src/api/movies/movies.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..8cda2b9663accb823cc2e1f707ebb4304d48c063 --- /dev/null +++ b/backend/src/api/movies/movies.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { MoviesService } from './movies.service'; +import { MoviesController } from './movies.controller'; +import { PrismaService } from '../../prisma/prisma.service'; + +@Module({ + controllers: [MoviesController], + providers: [MoviesService, PrismaService], +}) +export class MoviesModule {} diff --git a/backend/src/api/movies/movies.service.spec.ts b/backend/src/api/movies/movies.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9359e7d89743276d77b5c4ba2f6a79797e0c1511 --- /dev/null +++ b/backend/src/api/movies/movies.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MoviesService } from './movies.service'; + +describe('MoviesService', () => { + let service: MoviesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MoviesService], + }).compile(); + + service = module.get<MoviesService>(MoviesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/api/movies/movies.service.ts b/backend/src/api/movies/movies.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..4b5b6d4150964a1a993bf8665c10ea7a370e1856 --- /dev/null +++ b/backend/src/api/movies/movies.service.ts @@ -0,0 +1,97 @@ +import { Injectable } from '@nestjs/common'; +import { CreateMovieDto } from './dto/create-movie.dto'; +import { UpdateMovieDto } from './dto/update-movie.dto'; +import { PrismaService } from '../../prisma/prisma.service'; +import { plainToClass } from 'class-transformer'; +import { MovieEntity } from './entities/movie.entity'; +import { Movie } from '@prisma/client'; + +@Injectable() +export class MoviesService { + constructor(private prisma: PrismaService) {} + + async create(createMovieDto: CreateMovieDto): Promise<Movie> { + const movie = plainToClass(MovieEntity, createMovieDto); + return await this.prisma.movie.create({ + data: movie, + }); + } + + async findAll(mostRecentCnt?: number): Promise<Movie[]> { + if (mostRecentCnt) { + return await this.prisma.movie.findMany(); + } + + return await this.prisma.movie.findMany({ + orderBy: { + publishedAt: 'desc', + }, + take: mostRecentCnt, + }); + } + + async findOne(id: string): Promise<Movie> { + return await this.prisma.movie.findUnique({ + where: { + id, + }, + }); + } + + async addCategory(movieId: string, categoryName: string): Promise<Movie> { + await this.prisma.category.update({ + data: { + movies: { + connect: { + id: movieId, + }, + }, + }, + where: { + name: categoryName, + }, + }); + + return await this.prisma.movie.update({ + data: { + categories: { + connect: { + name: categoryName, + }, + }, + }, + where: { + id: movieId, + }, + include: { + categories: true, + }, + }); + } + + async update(id: string, updateMovieDto: UpdateMovieDto): Promise<Movie> { + const updatedMovie = { + ...(await this.findOne(id)), + ...plainToClass(MovieEntity, updateMovieDto), + }; + return await this.prisma.movie.update({ + where: { + id, + }, + data: { + ...updatedMovie, + }, + }); + } + + async remove(id: string): Promise<Movie> { + return await this.prisma.movie.update({ + where: { + id, + }, + data: { + deletedAt: new Date(), + }, + }); + } +} diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index cce879ee622146012901c9adb47ef40c0fd3a555..c73d6d8de8639d42fa5d77aade80f20465a76b0a 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -1,12 +1,7 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller } from '@nestjs/common'; import { AppService } from './app.service'; @Controller() export class AppController { constructor(private readonly appService: AppService) {} - - @Get() - getHello(): string { - return this.appService.getHello(); - } } diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 278b638f9d853fe8c1ff8cb67ea693775b49b99e..7084d7b4f1b414d2ecc8adcf627ea9d1fae01b1a 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,10 +1,18 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; +import { CategoriesModule } from './api/categories/categories.module'; +import { DirectorsModule } from './api/directors/directors.module'; +import { MoviesModule } from './api/movies/movies.module'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ - imports: [ConfigModule.forRoot()], + imports: [ + ConfigModule.forRoot(), + CategoriesModule, + DirectorsModule, + MoviesModule, + ], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/app.service.ts b/backend/src/app.service.ts index 927d7cca0badb13577152bf8753ce3552358f53b..7263d33a2a66e48c0b40af50ada82d18b0d376ae 100644 --- a/backend/src/app.service.ts +++ b/backend/src/app.service.ts @@ -1,8 +1,4 @@ import { Injectable } from '@nestjs/common'; @Injectable() -export class AppService { - getHello(): string { - return 'Hello World!'; - } -} +export class AppService {} diff --git a/backend/src/dto/categoryDto.ts b/backend/src/dto/categoryDto.ts new file mode 100644 index 0000000000000000000000000000000000000000..392b20e89fb44bdf0bb23fec41d1809d179072fc --- /dev/null +++ b/backend/src/dto/categoryDto.ts @@ -0,0 +1,7 @@ +import { IMovieDto } from './movieDto'; + +export interface ICategoryDto { + id: string; + name: string; + movies: IMovieDto[]; +} diff --git a/backend/src/dto/directorDto.ts b/backend/src/dto/directorDto.ts new file mode 100644 index 0000000000000000000000000000000000000000..004ec5e0f52b3db1a56c30cdb9eb135d91468530 --- /dev/null +++ b/backend/src/dto/directorDto.ts @@ -0,0 +1,9 @@ +import { IMovieDto } from './movieDto'; + +export interface IDirectorDto { + id: string; + name: string; + surname: string; + birthDate: Date; + movies: IMovieDto[]; +} diff --git a/backend/src/dto/index.ts b/backend/src/dto/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..356963be11cde763d021b4d15fdb853eaeb9f16c --- /dev/null +++ b/backend/src/dto/index.ts @@ -0,0 +1,5 @@ +import { ICategoryDto } from './categoryDto'; +import { IDirectorDto } from './directorDto'; +import { IMovieDto } from './movieDto'; + +export { ICategoryDto, IDirectorDto, IMovieDto }; diff --git a/backend/src/dto/movieDto.ts b/backend/src/dto/movieDto.ts new file mode 100644 index 0000000000000000000000000000000000000000..608d74dc7335efcccd347335b2df90344a6158c4 --- /dev/null +++ b/backend/src/dto/movieDto.ts @@ -0,0 +1,14 @@ +import { ICategoryDto } from './categoryDto'; +import { IDirectorDto } from './directorDto'; + +export interface IMovieDto { + id: string; + name: string; + originalName: string; + intro: string; + picture?: string; + publishedAt: Date; + runTimeMinutes: number; + director: IDirectorDto; + categories: ICategoryDto[]; +} diff --git a/backend/src/main.ts b/backend/src/main.ts index 4084ce75dbf659a0a90d934380c9d84a328a1a3a..9a76c1e93008ef76473c9f964c6686f4ee7d5fcb 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -1,11 +1,40 @@ -import { NestFactory } from '@nestjs/core'; +import { HttpAdapterHost, NestFactory } from '@nestjs/core'; import { ConfigService } from '@nestjs/config'; import { AppModule } from './app.module'; +import { ValidationPipe } from '@nestjs/common'; +import { + DocumentBuilder, + SwaggerCustomOptions, + SwaggerModule, +} from '@nestjs/swagger'; +import { PrismaClientExceptionFilter } from './prisma/prisma-client-exception.filter'; async function bootstrap(): Promise<void> { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); + app.useGlobalPipes( + new ValidationPipe({ + transform: true, + }), + ); + + const { httpAdapter } = app.get(HttpAdapterHost); + app.useGlobalFilters(new PrismaClientExceptionFilter(httpAdapter)); + + const swaggerDocConfig = new DocumentBuilder() + .setTitle('Movie Base API') + .setVersion('1.0') + .addTag('movies') + .addTag('directors') + .addTag('categories') + .build(); + const swaggerDoc = SwaggerModule.createDocument(app, swaggerDocConfig); + const swaggerOptions: SwaggerCustomOptions = { + customSiteTitle: 'Movie Base API Docs', + }; + SwaggerModule.setup('/', app, swaggerDoc, swaggerOptions); + const port = configService.get<number>('PORT') | 4000; console.log(`NestJS server is listening on: http://localhost:${port}`); await app.listen(port); diff --git a/backend/src/prisma/prisma-client-exception.filter.ts b/backend/src/prisma/prisma-client-exception.filter.ts new file mode 100644 index 0000000000000000000000000000000000000000..b864458325afeca36a9568aa3c3c21210ca0a9ba --- /dev/null +++ b/backend/src/prisma/prisma-client-exception.filter.ts @@ -0,0 +1,32 @@ +import { ArgumentsHost, Catch, HttpStatus } from '@nestjs/common'; +import { BaseExceptionFilter } from '@nestjs/core'; +import { Prisma } from '@prisma/client'; +import { Response } from 'express'; + +@Catch(Prisma.PrismaClientKnownRequestError) +export class PrismaClientExceptionFilter extends BaseExceptionFilter { + catch( + exception: Prisma.PrismaClientKnownRequestError, + host: ArgumentsHost, + ): void { + const context = host.switchToHttp(); + const response = context.getResponse<Response>(); + + switch (exception.code) { + case 'P2002': + // 409 error code when unique constraint violated + const statusCode = HttpStatus.CONFLICT; + const message = exception.message.replace(/\n/g, ''); + response.status(statusCode).json({ + statusCode, + message, // TODO: check the message if it does not expose more info than necessary + }); + break; + // TODO: other exception codes? + default: + // default 500 error code + super.catch(exception, host); + break; + } + } +} diff --git a/backend/src/prisma.service.ts b/backend/src/prisma/prisma.service.ts similarity index 100% rename from backend/src/prisma.service.ts rename to backend/src/prisma/prisma.service.ts diff --git a/docker-compose.yml b/docker-compose.yml index edd8a39a1895fcd5dda5b7554088266cdd729357..2f9ccafc2b4d775d6e8b7f1b1b499e032d4c9423 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,6 +27,8 @@ services: postgres: container_name: postgres image: postgres:14.3-alpine + ports: + - 127.0.0.1:${DB_PORT}:${DB_PORT} networks: - backend-network volumes: @@ -93,6 +95,7 @@ services: networks: backend-network: + driver: bridge frontend-network: volumes: diff --git a/sample.sql b/sample.sql new file mode 100644 index 0000000000000000000000000000000000000000..ca21121c8cd3942607f7aa82cb71c79689077073 --- /dev/null +++ b/sample.sql @@ -0,0 +1,482 @@ +-- Adminer 4.8.1 PostgreSQL 14.3 dump + +DROP TABLE IF EXISTS "Category"; +CREATE TABLE "public"."Category" ( + "id" text NOT NULL, + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "deletedAt" timestamp(3), + "name" text NOT NULL, + CONSTRAINT "Category_name_key" UNIQUE ("name"), + CONSTRAINT "Category_pkey" PRIMARY KEY ("id") +) WITH (oids = false); + +INSERT INTO "Category" ("id", "createdAt", "updatedAt", "deletedAt", "name") VALUES +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '2022-06-17 03:22:28.335', '2022-06-17 03:22:28.335', NULL, 'Drama'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '2022-06-17 03:22:32.405', '2022-06-17 03:22:32.406', NULL, 'Krimi'), +('0194145a-cc12-4334-8637-b2222460a944', '2022-06-17 03:22:45.485', '2022-06-17 03:22:45.486', NULL, 'Komedie'), +('f1c079ca-e421-4f5f-b6b9-a8ee774e4e98', '2022-06-17 03:22:49.544', '2022-06-17 03:22:49.545', NULL, 'Romantický'), +('9149e3dd-de80-453e-8361-3ed1472404b5', '2022-06-17 03:23:00.6', '2022-06-17 03:23:00.601', NULL, 'MysterióznÃ'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '2022-06-17 03:23:13.601', '2022-06-17 03:23:13.602', NULL, 'Thriller'), +('a8252bc5-e8c9-42a8-9196-d340acd836f9', '2022-06-17 03:23:25.88', '2022-06-17 03:23:25.881', NULL, 'Psychologický'), +('b1bda101-4b2b-48db-a4d0-bf26770aa21e', '2022-06-17 03:23:51.941', '2022-06-17 03:23:51.942', NULL, 'Historický'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', '2022-06-17 03:23:56.007', '2022-06-17 03:23:56.008', NULL, 'Životopisný'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '2022-06-17 03:25:01.7', '2022-06-17 03:25:01.7', NULL, 'AkÄnÃ'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '2022-06-17 03:25:05.76', '2022-06-17 03:25:05.761', NULL, 'Sci-Fi'), +('80869462-7c34-4795-b6d9-0c87dc0a3f3c', '2022-06-17 03:31:18.82', '2022-06-17 03:31:18.821', NULL, 'Pohádka'), +('695bcf99-8de9-4992-b9e6-04e8ef8d2d66', '2022-06-17 03:31:38.039', '2022-06-17 03:31:38.039', NULL, 'HudebnÃ'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', '2022-06-17 03:25:56.048', '2022-06-17 03:25:56.048', NULL, 'Fantasy'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '2022-06-17 03:26:00.104', '2022-06-17 03:26:00.105', NULL, 'Dobrodružný'), +('9d4201d6-8690-4b88-99a4-81670db1cabd', '2022-06-17 03:26:36.316', '2022-06-17 03:26:36.316', NULL, 'Horor'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', '2022-06-17 03:26:49.296', '2022-06-17 03:26:49.297', NULL, 'Western'), +('7ab10e30-f4f1-490e-8694-41bb888d7e00', '2022-06-17 03:28:07.661', '2022-06-17 03:28:07.662', NULL, 'Road movie'), +('eea14b3e-dea7-4dd2-b99e-7cedc7063471', '2022-06-17 03:28:37.603', '2022-06-17 03:28:37.604', NULL, 'VáleÄný'), +('1b524176-5fbd-4ac9-bda2-36030d9e9b15', '2022-06-17 03:29:23.041', '2022-06-17 03:29:23.041', NULL, 'SportovnÃ'); + +DROP TABLE IF EXISTS "Director"; +CREATE TABLE "public"."Director" ( + "id" text NOT NULL, + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "deletedAt" timestamp(3), + "name" text NOT NULL, + "surname" text NOT NULL, + "birthDate" timestamp(3), + CONSTRAINT "Director_name_surname_birthDate_key" UNIQUE ("name", "surname", "birthDate"), + CONSTRAINT "Director_pkey" PRIMARY KEY ("id") +) WITH (oids = false); + +INSERT INTO "Director" ("id", "createdAt", "updatedAt", "deletedAt", "name", "surname", "birthDate") VALUES +('3e54c152-0235-453c-9609-5281591a7061', '2022-06-17 03:22:24.183', '2022-06-17 03:22:24.183', NULL, 'Frank', 'Darabont', NULL), +('479fafd8-4266-4761-8ec1-d3c10007b2d4', '2022-06-17 03:22:37.338', '2022-06-17 03:22:37.338', NULL, 'Robert', 'Zemeckis', NULL), +('8ae2b975-485b-4883-84c8-454d7346d9cd', '2022-06-17 03:23:09.51', '2022-06-17 03:23:09.51', NULL, 'David', 'Fincher', NULL), +('8b8085a3-f1ce-4d2d-a922-7fdac528b8bc', '2022-06-17 03:23:34.762', '2022-06-17 03:23:34.763', NULL, 'MiloÅ¡', 'Forman', NULL), +('641a6488-49a1-4df9-aac4-0980e4eb9047', '2022-06-17 03:23:43.804', '2022-06-17 03:23:43.805', NULL, 'Steven', 'Spielberg', NULL), +('17124574-c42d-453a-a277-408b2c008a1d', '2022-06-17 03:24:01.142', '2022-06-17 03:24:01.143', NULL, 'Francis', 'Ford', NULL), +('986d434f-20ce-4288-bf52-aef2f8bbb869', '2022-06-17 03:24:14.254', '2022-06-17 03:24:14.255', NULL, 'Sidney', 'Lumet', NULL), +('54eaf53f-0591-41de-b722-57e4c71b5aa1', '2022-06-17 03:24:27.349', '2022-06-17 03:24:27.35', NULL, 'Eric', 'Toledano,', NULL), +('6243b3f8-ac10-472e-9baf-c97c07507a81', '2022-06-17 03:24:44.44', '2022-06-17 03:24:44.441', NULL, 'Jan', 'HÅ™ebejk', NULL), +('46cb4b90-d2e9-4b2f-87ef-371d9eea3cc9', '2022-06-17 03:24:57.628', '2022-06-17 03:24:57.629', NULL, 'James', 'Cameron', NULL), +('a394181b-50e7-4ebb-b5d5-04ff16f92ef3', '2022-06-17 03:25:14.717', '2022-06-17 03:25:14.717', NULL, 'Joseph', 'Kosinski', NULL), +('a2e48cfa-0ac6-4933-b143-d838679025df', '2022-06-17 03:25:27.83', '2022-06-17 03:25:27.83', NULL, 'Quentin', 'Tarantino', NULL), +('8c4dd6b4-6149-49f4-895a-556561ebc0de', '2022-06-17 03:25:51.987', '2022-06-17 03:25:51.988', NULL, 'Peter', 'Jackson', NULL), +('35ca45df-ff22-4e87-8532-d9412df17246', '2022-06-17 03:26:24.095', '2022-06-17 03:26:24.095', NULL, 'Jonathan', 'Demme', NULL), +('947ec5dc-6387-4049-8c80-e442ced8268b', '2022-06-17 03:26:45.23', '2022-06-17 03:26:45.23', NULL, 'Sergio', 'Leone', NULL), +('c108844d-b56f-4017-b87e-a085fa52ab8d', '2022-06-17 03:26:58.438', '2022-06-17 03:26:58.438', NULL, 'Christopher', 'Nolan', NULL), +('bdab1bf7-04a3-490b-8dd6-4167576f5686', '2022-06-17 03:27:19.736', '2022-06-17 03:27:19.736', NULL, 'Clint', 'Eastwood', NULL), +('ea3f40f7-d6d3-4ba2-a726-843b8f0b9c2e', '2022-06-17 03:27:28.609', '2022-06-17 03:27:28.609', NULL, 'Lilly', 'Wachowski,', NULL), +('32ab1439-a1b1-49ff-8840-d7530a10dbee', '2022-06-17 03:27:59.508', '2022-06-17 03:27:59.508', NULL, 'Barry', 'Levinson', NULL), +('ccf8809f-6dbc-45b8-a796-3e04dc3076db', '2022-06-17 03:28:12.484', '2022-06-17 03:28:12.484', NULL, 'John', 'Sturges', NULL), +('fe3ffb22-b415-4860-82ef-4f6f07e64c55', '2022-06-17 03:28:29.453', '2022-06-17 03:28:29.454', NULL, 'JiÅ™Ã', 'KrejÄÃk', NULL), +('4d6704cb-02bc-4283-a4c2-074dfa1afd9c', '2022-06-17 03:28:57.61', '2022-06-17 03:28:57.611', NULL, 'Ridley', 'Scott', NULL), +('0c4cb1ea-94e7-4f80-9693-ae8d918eca73', '2022-06-17 03:29:10.826', '2022-06-17 03:29:10.827', NULL, 'Ron', 'Howard', NULL), +('2ee30665-fd1a-434d-9aef-30277778de1d', '2022-06-17 03:29:32.034', '2022-06-17 03:29:32.035', NULL, 'James', 'Mangold', NULL), +('c31e5574-74dc-4322-b9e9-c74081406a06', '2022-06-17 03:29:53.142', '2022-06-17 03:29:53.143', NULL, 'John', 'McTiernan', NULL), +('5a332614-c1b9-47c2-b783-6fb920c64717', '2022-06-17 03:30:29.427', '2022-06-17 03:30:29.427', NULL, 'George', 'Roy', NULL), +('fe855b14-b95c-422a-adfc-fc706e60b03a', '2022-06-17 03:30:57.711', '2022-06-17 03:30:57.711', NULL, 'Luc', 'Besson', NULL), +('bfaf47b3-d677-42ff-b1cc-b03ee2c24f87', '2022-06-17 03:31:14.743', '2022-06-17 03:31:14.743', NULL, 'Hynek', 'BoÄan', NULL), +('ce7f0437-bcc5-43f2-b689-448f1daafff1', '2022-06-17 03:31:42.853', '2022-06-17 03:31:42.854', NULL, 'Jan', 'SvÄ›rák', NULL), +('9018001f-5ccf-400d-9faa-70241a2aa55f', '2022-06-17 03:31:55.997', '2022-06-17 03:31:55.998', NULL, 'OldÅ™ich', 'Lipský', NULL), +('4c215c46-2e36-4ec2-a580-7023ee5324a5', '2022-06-17 03:32:05.126', '2022-06-17 03:32:05.127', NULL, 'Irvin', 'Kershner', NULL), +('950163f9-c842-4a1f-b195-a2f4c7245bdb', '2022-06-17 03:32:26.196', '2022-06-17 03:32:26.196', NULL, 'Martin', 'FriÄ', NULL), +('138a6ec7-6a38-4fca-997e-66bfebfec317', '2022-06-17 03:32:54.524', '2022-06-17 03:32:54.525', NULL, 'Curtis', 'Hanson', NULL), +('84fb6602-de41-4b76-9c1a-581ebac234df', '2022-06-17 03:33:15.638', '2022-06-17 03:33:15.639', NULL, 'Fernando', 'Meirelles,', NULL), +('6ba690c6-39a6-4eec-8e1b-5067fe5492ae', '2022-06-17 03:34:33.233', '2022-06-17 03:34:33.233', NULL, 'Juraj', 'Herz', NULL), +('bd48f395-6de7-492c-a0a5-113a79e394c9', '2022-06-17 03:34:58.687', '2022-06-17 03:34:58.688', NULL, 'Kevin', 'Costner', NULL); + +DROP TABLE IF EXISTS "Movie"; +CREATE TABLE "public"."Movie" ( + "id" text NOT NULL, + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "deletedAt" timestamp(3), + "name" text NOT NULL, + "originalName" text NOT NULL, + "intro" text NOT NULL, + "picture" text, + "runTimeMinutes" integer NOT NULL, + "directorId" text NOT NULL, + "publishedAt" integer NOT NULL, + CONSTRAINT "Movie_originalName_publishedAt_directorId_key" UNIQUE ("originalName", "publishedAt", "directorId"), + CONSTRAINT "Movie_pkey" PRIMARY KEY ("id") +) WITH (oids = false); + +INSERT INTO "Movie" ("id", "createdAt", "updatedAt", "deletedAt", "name", "originalName", "intro", "picture", "runTimeMinutes", "directorId", "publishedAt") VALUES +('bf9d8581-6f71-40ed-b048-1d4612252347', '2022-06-17 03:22:26.245', '2022-06-17 03:22:26.246', NULL, 'Vykoupenà z vÄ›znice Shawshank', 'Vykoupenà z vÄ›znice Shawshank', 'Andy Dufresne (Tim Robbins) je mladý a úspěšný bankéř. Jeho život se drasticky zmÄ›nà poté, co je odsouzen k trestu dvojnásobného doživotà za vraždu manželky a jejÃho milence. Andy je ovÅ¡em jediný, kdo vÃ, že zloÄiny nespáchal. Andy, který je v civilnÃm životÄ› mlÄenlivý bankéř, je poslán do vÄ›znice Shawshank, aby si trest krutÄ› odpykal, a musà se nauÄit probÃt nelÃtostnými podmÃnkami za zdmi vÄ›zenÃ, kde je život Äasto na ostřà nože. Jeho tichá sÃla si postupnÄ› zÃská respekt nejen spoluvÄ›zňů, zejména Reda (Morgan Freeman), ale hlavnÄ› zamÄ›stnanců vÄ›zenÃ. Ale pod rouÅ¡kou zdánlivÄ› flegmatického pÅ™ijetà nespravedlivého trestu se skrývá Andyho zaryté odhodlánà dostat se na svobodu… + + + (TV Prima)', NULL, 142, '3e54c152-0235-453c-9609-5281591a7061', 1994), +('5a075dfc-afdd-49a7-9c19-052c41bc7f5f', '2022-06-17 03:22:39.39', '2022-06-17 03:22:39.391', NULL, 'Forrest Gump', 'Forrest Gump', 'PonÄ›kud prostoduchý Forrest Gump, vyzbrojen užiteÄnými radami své matky, se vydává na pouÅ¥ životem, který mu pÅ™ipravà nejedno pÅ™ekvapenÃ. Mnoho hoÅ™kých, ale také nádherných chvil...Mladý muž jménem Forrest Gump sedà na zastávce autobusu a každému, kdo si pÅ™isedne, vyprávà o svém životÄ›. PonÄ›kud jednoduchý chlapec se narodil v AlabamÄ›, kde žil jen s matkou, která mu dala mnoho dobrých rad do života. PÅ™edevÅ¡Ãm tu, aby si nikdy nenechal od nikoho namluvit, že je jiný než ostatnÃ. Dostala ho dokonce i do normálnà školy, pÅ™estože jà doporuÄovali zvláštnÃ, vzhledem k jeho nÃzkému IQ. Forrest, terÄ zlomyslných vtÃpků a krutých žertů svých kamarádů, si tam najde pÅ™Ãtelkyni na celý život: Jenny je půvabná blonÄatá holÄiÄka, kterou zneužÃvá otec, a tak ji dajà do výchovy babiÄce. Oba se stanou nerozluÄnými přáteli. Jenny Forrestovi dá dalÅ¡Ã cennou radu do života: když budeÅ¡ mÃt problém, utÃkej. A tak Forrest proutÃká Å¡kolou, pak i stÅ™ednà školou a nakonec vysokou, kde se osvÄ›dÄà jako nejrychlejÅ¡Ã hrÃ¡Ä amerického fotbalu. Po svém prožÃvá i velké události v amerických dÄ›jinách, tÅ™eba pÅ™ijetà dvou prvnÃch Äerných studentů na univerzitu nebo setkánà s prezidentem Kennedym... Forrest se na vÅ¡e dÃvá svýma naivnÃma oÄima, aniž by vÄ›ci zvažoval do důsledků. ŘÃdà se upÅ™Ãmným citem, jako když stále a opakovanÄ› „zachraňuje“ Jenny, jakmile se mu zdá, že jà nÄ›kdo ubližuje. Když zÃská diplom, dá se naverbovat do armády. Doslechne se, že Jenny vyhodili ze Å¡koly kvůli nestoudným fotkám a že se pokouÅ¡Ã v Memphisu prosadit jako zpÄ›vaÄka. NavÅ¡tÃvà ji a znovu neÅ¡ikovnÄ› „zachraňuje“. Pak je poslán do Vietnamu. Ani hrůzy války tak docela nechápe, i když se pÅ™i jednom útoku projde dokonalým peklem. Je zabit jeho zatÃm jediný pÅ™Ãtel, Äernoch Bubba. Forrest, kterého chtÄ›l Bubba pÅ™ibrat jako partnera do své firmy, je zdrcený. PÅ™esto zachránà nÄ›kolik dalÅ¡Ãch vojáků vÄetnÄ› poruÄÃka Dana Taylora, který mu ale nenà pranic vdÄ›Äný: jakožto Älen rodiny, v nÞ celé generace mužů umÃraly ve válkách, si pÅ™eje zemÅ™Ãt po boku svých mužů. A on navÃc pÅ™ijde o obÄ› nohy. ZranÄ›n je ale i Forrest a vracà se domů. JeÅ¡tÄ› ve Vietnamu v nemocnici se mu vrátà dopisy, které pravidelnÄ› psal Jenny a jejichž adresátka nebyla zastižena... Po návratu domů mu prezident Johnson udÄ›là medaili a pÅ™i prohlÃdce Washingtonu se pÅ™imÃchá do davu protestujÃcÃch proti válce. Je vyzván, aby pohovoÅ™il o Vietnamu, nejde ale zvuk. PÅ™esto ho tisÃcihlavý dav zdravà jako hrdinu. Mezi pÅ™ihlÞejÃcÃmi je i Jenny, nynà horlivá aktivistka protiváleÄného hnutà Černà panteÅ™i. Shledánà Forresta s jeho velkou a jedinou láskou je dojemné. Prochodà spolu celou noc a povÃdajà si. Forrest nechce, aby Jenny opÄ›t odjela, ale ta se chystá do Kalifornie. Forrest zůstává zase sám... + + + (TV Prima)', NULL, 142, '479fafd8-4266-4761-8ec1-d3c10007b2d4', 1994), +('e153953b-d6d4-46d3-a686-cbee3a9ce826', '2022-06-17 03:22:54.477', '2022-06-17 03:22:54.478', NULL, 'Zelená mÃle', 'Zelená mÃle', 'Brilantnà filmové drama Zelená mÃle podle knižnà pÅ™edlohy Stephena Kinga natoÄil režisér Frank Darabont, který se zároveň podÃlel i na jeho scénáři. Film s vynikajÃcÃm Tomem Hanksem v hlavnà roli, byl nominován na ÄtyÅ™i Oscary. Centrem pÅ™ÃbÄ›hu je Äerný obr John Coffey (Michael Clarke Duncan), ÄekajÃcà na popravu za zloÄin, který dost možná nespáchal a pÅ™esto zemÅ™e, a dále pak vÄ›Äné dilema kolem rozhodovánà o trestu smrti. DÄ›j filmu se odehrává ve vÄ›znici, kde sedà ti nejvÄ›tÅ¡Ã hÅ™ÃÅ¡nÃci, a kde je hrůzostraÅ¡ná chodba natÅ™ená na zeleno, které vÅ¡ichni Å™Ãkajà Zelená mÃle. Chodba, na jejÃmž konci Äeká smrt. Pokud se nestane zázrak... + + + (Bontonfilm)', NULL, 188, '3e54c152-0235-453c-9609-5281591a7061', 1999), +('91abd554-90cb-42b2-946d-fb9bf82540de', '2022-06-17 03:23:11.545', '2022-06-17 03:23:11.546', NULL, 'Sedm', 'Sedm', 'Dva policisté (Brad Pitt a Morgan Freeman) jsou na stopÄ› geniálnÃho vraha, zodpovÄ›dného za sérii dÄ›sivých vražd, jejichž obÄ›ti spojuje sedm smrtelných hÅ™Ãchů. V jedné z rolà tohoto kvalitnÃho trhilleru, zasazeného do temného mÄ›sta nasáklého bolestà a zkázou, uvidÃte také Gwyneth Paltrow. David Fincher (Klub rváÄů, Zodiac, Podivuhodný pÅ™Ãpad Benjamina Buttona) s dokonalou znalostà naÅ¡ich nejhlubÅ¡Ãch obav pevnÄ› svÃrá otěže akce – fyzické, psychické i spirituálnà – neodvratnÄ› směřujÃcà k rozuzlenÃ, které do hloubi otÅ™ese i tou nejzatvrzelejÅ¡Ã duÅ¡Ã. + + + (Magic Box)', NULL, 127, '8ae2b975-485b-4883-84c8-454d7346d9cd', 1995), +('a5ff76f6-3e98-4f01-a483-1eeaa1bc2251', '2022-06-17 03:23:36.804', '2022-06-17 03:23:36.805', NULL, 'PÅ™elet nad kukaÄÄÃm hnÃzdem', 'PÅ™elet nad kukaÄÄÃm hnÃzdem', 'PÅ™edlohou k filmu PÅ™elet nad kukaÄÄÃm hnÃzdem byl režiséru MiloÅ¡i Formanovi román Kena Keseyho, který ho psal pÅ™i působenà v „nemocnici pro veterány“. SnÃmek se stal nejvÄ›tÅ¡Ãm mezinárodnÃm úspÄ›chem ve FormanovÄ› kariéře. V roce 1976 zÃskal Oscara ve vÅ¡ech hlavnÃch kategoriÃch – za nejlepÅ¡Ã film, režii, mužský herecký výkon (Jack Nicholson), ženský herecký výkon (Louise Fletcherová) a scénář. Majitelem filmových a divadelnÃch práv byl 13 let Kirk Douglas, který je postoupil svému synu Michaelovi a tÃm z nÄ›ho udÄ›lal úspěšného producenta... Zrzavý irský rvÃ¡Ä a profesionálnà karbanÃk Randle Patrick McMurphy si odpykává trest za opakované násilné napadenà a sexuálnà zneužitÃ. MÃsto aby se držel v pracovnÃm táboÅ™e, hraje pomateného a nechá se poslat do zdánlivého klidu psychiatrické léÄebny. Jeho životnà elán a silná osobnost se v ústavu brzy stÅ™etávajà s absolutismem vrchnà sestry Ratchedové, která s pomocà trojice lapiduchů tyransky vládne celému ústavu. McMurphy nesnese pohled na uÅ¡lápnuté pacienty a brzy v nich probouzà poslednà špetku hrdosti a radosti ze života. V zápasu s Velkou sestrou obrátà blázinec doslova vzhůru nohama. StÄ›ny ústavu se otřásajà jeho hÅ™motným smÃchem a nespoutaným elánem. Vzpoura McMurphyho ale nemá velkou nadÄ›ji proti sÃle maÅ¡inérie zosobnÄ›né Velkou sestrou… Brilantnà románová satira Kena Keseyho, mÃsÃcà v sobÄ› komiku i tragiku, pÅ™erůstá v neobyÄejnÄ› působivém filmovém zpracovánà v silný protest proti neomezené moci a omezovánà každého ÄlovÄ›ka. + + + (ÄŒeská televize)', NULL, 133, '8b8085a3-f1ce-4d2d-a922-7fdac528b8bc', 1975), +('f30a8732-a3bd-4da9-b99f-9e741776d937', '2022-06-17 03:23:45.832', '2022-06-17 03:23:45.832', NULL, 'Schindlerův seznam', 'Schindlerův seznam', 'Polský Krakov 1939. Židovská obec je vystavována stále se zvyÅ¡ujÃcÃmu tlaku ze strany nacistů. Do této vÅ™avy vstupuje neúspěšný obchodnÃk Oskar Schindler, Älen nacistické strany, velký svůdnÃk a muž, který cÃtÃ, že by na váleÄném utrpenà mohl hodnÄ› vydÄ›lat. Levná pracovnà sÃla v židovském ghettu zajiÅ¡Å¥uje jeho továrnÄ› na smaltované nádobà obrovské zisky. Jenže TÅ™età řÃÅ¡e má s jeho zamÄ›stnanci úplnÄ› jiné úmysly, v dobytÄácÃch je chce poslat na vÄ›Änost, do OsvÄ›timi. Sám Schindler možná netuÅ¡il, kdy v tÄ›chto nelidských opatÅ™enÃch pÅ™estal vnÃmat ohroženà svého podnikánÃ, a kdy zaÄal o „své“ židy bojovat kvůli vlastnÃmu svÄ›domÃ. + + + (CinemArt)', NULL, 195, '641a6488-49a1-4df9-aac4-0980e4eb9047', 1993), +('d6f9f4a2-2e3e-44af-bfe4-24fbd3d9f1da', '2022-06-17 03:24:03.181', '2022-06-17 03:24:03.181', NULL, 'Kmotr', 'Kmotr', 'Gangsterské drama Kmotr, natoÄené podle stejnojmenného bestselleru Maria Puza, patřà mezi pÅ™elomová dÃla tzv. Nového Hollywoodu, a to jak komerÄnÄ›, tak umÄ›lecky. PÅ™ÃbÄ›h newyorské mafiánské rodiny Corleonů, jÞ tvrdou rukou šéfuje starý don Vito (Marlon Brando), se odehrává v letech 1945 - 55 a zaznamenává prudký rozmach organizovaného zloÄinu po skonÄenà druhé svÄ›tové války. V epických, rozmáchlých obrazech pÅ™ed divákem ožÃvajà osudy italsko-americké rodiny, jež svůj blahobyt založila na hazardu, prostituci, vydÃránà a zastraÅ¡ovánÃ. Tehdy mladý režisér Francis Ford Coppola, který byl ponÄ›kud pÅ™ekvapivÄ› pověřen spoleÄnostà Paramount realizacà jednoho z jejÃch stěžejnÃch projektů (své nepochybnÄ› sehrálo i jeho italsko-americké zázemÃ), musel redukovat nÄ›které motivy rozsáhlé pÅ™edlohy, ovÅ¡em podaÅ™ilo se mu vÄ›rnÄ› zachovat jejÃho ducha - pÅ™esný popis fungovánà zloÄinecké organizace, zachycenà jejà hierarchie, zaÄlenÄ›nà do tehdejÅ¡Ãho spoleÄenského vývoje i Äasto kritizované zdůrazňovánà rodinné soudržnosti. Pevnou dramatickou stavbu scénáře (na nÄ›mž Coppola spolupracoval s autorem pÅ™edlohy) podpoÅ™ilo i režijnà ztvárnÄ›nÃ, jež Äerpalo pÅ™edevÅ¡Ãm z klasických vypravÄ›Äských praktik hollywoodských dÄ›l 30. let (napÅ™. Jih proti Severu), okoÅ™enÄ›ných soudobým pÅ™Ãklonem k realismu, zejména v zobrazovánà násilà a sexu. SnÃmek zÃskal tÅ™i Oscary - za nejlepÅ¡Ã film, scénář podle pÅ™edlohy a mužský herecký výkon v hlavnà roli (Marlon Brando, který svou cenu odmÃtl pÅ™evzÃt). Pro úspÄ›ch filmu, který se stal diváckým hitem nejen ve Spojených státech, ale i ve zbytku svÄ›ta (kromÄ› napÅ™. tehdejÅ¡Ãho ÄŒeskoslovenska, kde se kvůli údajné glorifikaci zloÄinu a násilà nesmÄ›l promÃtat, aÄ Puzova kniha v Äeském pÅ™ekladu vyÅ¡la), bylo klÃÄové herecké obsazenà hlavnÃch úloh dona Vita Corleona a jeho nejmladÅ¡Ãho syna Michaela. Vedenà Paramountu nesouhlasilo s Marlonem Brandem, na nÄ›mž mu vedle jeho dobÅ™e známé povÄ›sti "obtÞného a nespolehlivého herce, jehož poslednà filmy byly propadáky", vadilo hlavnÄ› to, že je na roli mafiánského patriarchy pÅ™ÃliÅ¡ mladý (v dobÄ› pÅ™Ãprav filmu mu bylo 47 let), a jeÅ¡tÄ› vÄ›tÅ¡Ã odpor dávalo najevo vůÄi Al Pacinovi, jenž se jim zdál málo známý, pÅ™ÃliÅ¡ obyÄejný a pÅ™edevÅ¡Ãm malý. Coppola s obÄ›ma herci natoÄil testy, jež nakonec šéfy Paramountu pÅ™esvÄ›dÄily. Se stejnou peÄlivostà režisér obsadil i dalÅ¡Ã role, nejstarÅ¡Ãho Corleonova syna, prchlivého Sonnyho (James Caan), jeho slaboÅ¡ského bratra Freda (John Cazale) a conseglieriho Toma Hagena (Robert Duvall). Úlohy Corleonových "vojáků" a dalÅ¡Ãch gangsterů ztÄ›lesnili vesmÄ›s málo známà pÅ™edstavitelé, kteřà dokonale typovÄ› odpovÃdali svým postavám (napÅ™. Richard Castellano jako Clemenza nebo Al Lettieri jako Sollozzo). V kreaci Michaelovy neitalské dÃvky Kay Adamsové zaujala budoucà múza Woodyho Allena Diane Keatonová a Corleonovu týranou dceru Connii ztÄ›lesnila pozdÄ›jÅ¡Ã Stalloneova partnerka z Rockyho, Coppolova mladÅ¡Ã sestra Talia Shireová. Téměř tÅ™Ãhodinový snÃmek (který uvádÃme, stejnÄ› jako dalÅ¡Ã dÃly trilogie, ve dvou Äástech) vrcholà slavnou scénou kÅ™tu Michaelova synovce (pÅ™edstavovaného Coppolovou dcerou SofiÃ), prostÅ™Ãhaného krvavým vyÅ™izovánÃm úÄtů s ostatnÃmi mafiánskými rodinami, jež znamenalo upevnÄ›nà moci Corleonova klanu, ale také definitivnà pÅ™evzetà "rodinné firmy" zprvu zdráhavým Michaelem, který se stává důstojným nástupcem zemÅ™elého otce. + + + (ÄŒeská televize)', NULL, 175, '17124574-c42d-453a-a277-408b2c008a1d', 1972), +('b8a0e8d1-6008-45f2-b487-833e628e8556', '2022-06-17 03:24:16.296', '2022-06-17 03:24:16.297', NULL, 'Dvanáct rozhnÄ›vaných mužů', 'Dvanáct rozhnÄ›vaných mužů', 'Dvanáct porotců má jednomyslnÄ› rozhodnout o vinÄ› Äi nevinÄ› mladého muže, který je obvinÄ›n z vraždy svého otce. Porotci jsou průmÄ›rnà AmeriÄané s obyÄejnými zájmy a zamÄ›stnánÃm. V průběžném hlasovánà jedenáct hlasuje za vinu, jenom porotce ÄÃslo 8 je proti... + + + (Magic Box)', NULL, 96, '986d434f-20ce-4288-bf52-aef2f8bbb869', 1957), +('f7735ebd-e246-40bb-8ddf-b30b2ccc3445', '2022-06-17 03:24:29.386', '2022-06-17 03:24:29.387', NULL, 'NedotknutelnÃ', 'NedotknutelnÃ', 'Ochrnutý a bohatý aristokrat Philippe si za svého nového opatrovnÃka vybere Drisse, živelného mladÃka z pÅ™edmÄ›stÃ, kterého právÄ› propustili z vÄ›zenÃ. Jinými slovy - najde si na tuto práci tu nejménÄ› vhodnou osobu. Podařà se jim vÅ¡ak propojit nemožné: Vivaldiho a populárnà hudbu, serióznost a žoviálnà vtÃpky, luxusnà obleky a tepláky. Bláznivým, zábavným, silným, neoÄekávaným a hlavnÄ› „nedotknutelným“, pÅ™esnÄ› takovým se stane jejich přátelstvÃ… Komedie s dramatickou zápletkou o tom, že ani od krku po prsty u nohou nepohyblivý ÄlovÄ›k odkázaný na pomoc druhých, nemusà ztratit smysl života. A o tom, že i nejménÄ› pravdÄ›podobné spojenà melancholického multimilionáře a extrovertnÃho recidivisty může humornÄ› zapůsobit na diváka a může se z nÄ›j stát kasovnà trhák. + + + (oficiálnà text distributora)', NULL, 112, '54eaf53f-0591-41de-b722-57e4c71b5aa1', 2011), +('de359ca8-3d88-4315-8525-0bb873240035', '2022-06-17 03:24:46.492', '2022-06-17 03:24:46.492', NULL, 'PelÃÅ¡ky', 'PelÃÅ¡ky', 'A je tu zpÄ›t jedna z nejúspěšnÄ›jÅ¡Ãch Äeských filmových komedià od renomovaných tvůrců - režiséra J. HÅ™ebejka a scenáristy P. Jarchovského s Å™adou skvÄ›lých herců. VraÅ¥me se tedy s oblÃbenými postavami k rodinným rituálům, láskám a trapasům odehrávajÃcÃm se na sklonku Å¡edesátých let minulého stoletà v jedné pražské Ätvrti. Jemná poetika a humorná nadsázka jsou charakteristické pro vyprávÄ›nà životnÃch osudů třà generacà mužů a žen ve zvláštnÃm obdobà naÅ¡ich dÄ›jin v roce 1968… V jedné dvoupatrové vile tu žijà dvÄ› rodiny - Å ebkovi a Krausovi. Otec Å ebek (M. Donutil), prostoduchý, ale dobrácký důstojnÃk z povolánÃ, je zastáncem panujÃcÃho režimu a stejnÄ› vehementnÄ› obhajuje i vlastnà neomylnost v roli hlavy rodiny. Elegantnà otec Kraus (J. Kodet), bývalý odbojář s trpkou váleÄnou zkuÅ¡enostÃ, je naopak zarytým opoziÄnÃkem. Také on je pÅ™esvÄ›dÄený o tom, že má za vÅ¡ech okolnostà pravdu - nenà proto divu, že se tihle dva nemajà zrovna v lásce. Jejich dÄ›ti - gymnazista Michal (M. Beran) a jeho spolužaÄka JindÅ™iÅ¡ka (K. Nováková) - spolu vycházejà docela dobÅ™e. I když Michal by byl rád, kdyby ho jeho sousedka brala trochu vÃc na vÄ›domÃ. Ta má ale oÄi pro jiného. Nezbývá mu tedy nic jiného, než aby smutnÄ› pÅ™ihlÞel, jak mu jeho prvnà milostné body krade spolužák Elien (O. Brousek). U Å ebků a Krausů se zatÃm stÅ™Ãdajà rodinné návÅ¡tÄ›vy, ve vÅ¡Ã obÅ™adnosti se tu slavà Vánoce, svatba i neÄekaný, bolestný pohÅ™eb. Do zabydlených domácnostà vtrhnou i nÄ›které novodobé vymoženosti v podobÄ› umÄ›lohmotných lžiÄek, nerozbitných sklenic i podivných her pro stateÄné pionýry. Mládež zatÃm pokukuje po lákadlech svÄ›ta kapitalismu a snažà se žÃt svůj vlastnÃ, na rodiÄovských autoritách a "velké" historii nezávislý život. V soukromà rodinných pelÃÅ¡ků se tak Äas od Äasu odehrajà malá dramata názorů a vztahů, která se v pamÄ›ti jejich úÄastnÃků otisknou už nejspÃÅ¡ navždy… + + + (ÄŒeská televize)', NULL, 116, '6243b3f8-ac10-472e-9baf-c97c07507a81', 1999), +('dcc82e4a-16d6-4223-9898-3a0e77a48195', '2022-06-17 03:24:59.655', '2022-06-17 03:24:59.656', NULL, 'Terminátor 2: Den zúÄtovánÃ', 'Terminátor 2: Den zúÄtovánÃ', 'V budoucnosti pÅ™ebÃrajà stroje vládu nad svÄ›tem a mezi nimi a lidmi zuřà nelÃtostná válka. Jedinou nadÄ›ji pro lidstvo pÅ™edstavuje John Connor, jehož matku se pÅ™ed deseti lety neúspěšnÄ› pokusili zabÃt... Stroje se ho obávajÃ, proto vyÅ¡lou do minulosti nový prototyp kyborga T-1000, který má zniÄit Connora jako malého chlapce. VzápÄ›tà za nÃm lidé vysÃlajà starý model terminátora T-800, který je naprogramován, aby Johna chránil... + + + (H.C.E.)', NULL, 137, '46cb4b90-d2e9-4b2f-87ef-371d9eea3cc9', 1991), +('ba8d9bb7-4f01-40bd-a893-4e56b1025738', '2022-06-17 03:25:16.747', '2022-06-17 03:25:16.747', NULL, 'Top Gun: Maverick', 'Top Gun: Maverick', 'Pete „Maverick“ Mitchell (Tom Cruise) k smrti rád pilotuje stÃhaÄky. Dokonce tak, že se už pÅ™es tÅ™icet let úspěšnÄ› bránà povýšenà ve strukturách amerického letectva, protože to by ho z kokpitu vyhnalo do vyhřáté kanceláře. Maverick byl navÃc vždycky magnetem na průšvihy, což se s armádnà kariérou taky docela vyluÄuje. Pilot je ovÅ¡em bravurnÃ, možná ten úplnÄ› nejlepÅ¡Ã, a proto dostane nabÃdku stát se instruktorem elitnÃch stÃhaÄů z programu Top Gun, které má pÅ™ipravit na úkol, jenž spadá do kategorie Mission Imposssible. KromÄ› téhle bude muset Maverick zvládnout i jednu obtÞnou soukromou misi. JednÃm z pilotů, které má pÅ™ipravit do akce, je i Bradley Bradshaw (Miles Teller), syn jeho kamaráda a navigátora Goose. Znalci prvnÃho Top Gunu vÄ›dÃ, že Goose zahynul, když se neúspěšnÄ› katapultoval z neovladatelné stÃhaÄky, pilotované právÄ› Maverickem. A jeho syn mu otcovu smrt klade za vinu. Maverick za žádnou cenu nechce, aby Bradleyho potkal stejný osud jako jeho otce. PÅ™itom si uvÄ›domuje, že pravdÄ›podobnost, že nÄ›který z pilotů plánovanou leteckou operaci nepÅ™ežije, nenà vůbec malá. + + + (CinemArt)', NULL, 131, 'a394181b-50e7-4ebb-b5d5-04ff16f92ef3', 2022), +('ae2b5576-8a70-4c7e-ac1d-b698067dce4a', '2022-06-17 03:25:29.875', '2022-06-17 03:25:29.875', NULL, 'Pulp Fiction: Historky z podsvÄ›tÃ', 'Pulp Fiction: Historky z podsvÄ›tÃ', 'TÅ™i na prvnà pohled nesouvisejÃcà historky z krvavého podsvÄ›tà tvořà jeden pÅ™ÃbÄ›h plný stylizovaného násilÃ, drog, dnes už kultovnÃch dialogů a hlavnÄ› absurdnÃch situacà a neÄekaných dÄ›jových zvratů...Pulp FictionZlodÄ›jÃÄek Pumpkin s pÅ™Ãtelkynà Honey Bunny se v kavárnÄ› domlouvajà na dalÅ¡Ã loupeži. Honey Bunny má skvÄ›lý nápad – vybrat pÅ™Ãtomným kapsy a peněženky. Polibek pro Å¡tÄ›stà a se zbranà v ruce se Pumpkin zvedá od svého stolu. JeÅ¡tÄ› netuÅ¡Ã, že to nebude jen tak obyÄejné pÅ™epadenÃ, protože u nedalekého stolu sedà velmi zvláštnÃmi událostmi dne zmatený gangster Jules Winnfield... Toho dne ráno se Jules se svým parťákem Vincentem Vegou vypravili vyÅ™Ãdit kÅ¡eft svého mafiánského bosse Marselluse Wallaceho. Vincent se vrátil z tÅ™Ãletého pobytu v EvropÄ› a Marsellus ho pověřil bavenÃm své manželky Mii, zatÃmco on bude mimo L. A. Má s nà zajÃt nÄ›kam na veÄeÅ™i a dát na ni pozor... Vincent Vega a žena Marcelluse Wallaceho Když Vincent s Julesem dorazà k šéfovi, je u nÄ›j zrovna boxer Butch. Jeho kariéra je u konce a Marsellus mu naÅ™izuje, aby svůj poslednà zápas pustil v pátém kole. Marsellus si tak má pÅ™ijÃt na sluÅ¡né penÃze... Vincent si jeÅ¡tÄ› potom zajde koupit koks, aby pÅ™ežil veÄer s Wallaceovou paniÄkou. Ukáže se ale, že Mia je mladá a plná energie, kterou bere mimo jiné i z drog. Na veÄer majà zamluvený stůl v podniku „Mazaný králÃÄek", hospodÄ› pro fanouÅ¡ky Elvise Presleyho a dalÅ¡Ãch hvÄ›zd. BÄ›hem veÄeÅ™e se dajà do Å™eÄi, celkem si padnou do oka. Mia donutà Vincenta zúÄastnit se soutěže v tancovánà twistu, kterou vyhrajÃ. Po návratu do domu si Vincent odskoÄà a bÄ›hem té chvÃle, se Mia pÅ™edávkuje koksem a upadne do Å¡oku. Vypadá to, že umÃrá. Vincent musà rychle jednat...Zlaté hodinky V domÄ› Coolidgeových se objevà kapitán Koons. Je to voják, který sloužil spolu s panem Coolidgem ve Vietnamu a chce pÅ™edat malému Butchovi zlaté náramkové hodinky. Butch se o pÅ™estávce mezi dvÄ›ma koly boxu probudà z této vzpomÃnky – snu. Hrdost mu nedovolà zápas prohrát. Zápas vyhraje – boxera dokonce zabije. Musà ale rychle prchnout pÅ™ed Wallacem. UtÃká do taxÃku, ve kterém se seznámà se zvÄ›davou Esmeraldou. Ta by chtÄ›la vÄ›dÄ›t, jaké to je zabÃt ÄlovÄ›ka. Butch to ale nevÃ, o jeho smrti se dozvÄ›dÄ›l až v taxÃku. NemÄ›l moc na výbÄ›r – jakmile se proslechlo, že má Butch prohrát, sázkaÅ™i rozboÅ™ili stánky bookmakerům. NavÃc jeho protivnÃk si ani pořádnÄ› nezaÅ¡nÄ›roval rukavice, jinak by mohl žÃt. Esmeralda ho odveze do motelu, a za pÅ™Ãplatek slÃbà mlÄenlivost. V pokoji už na Butche Äeká jeho milenka Fabienne. SpoleÄnÄ› se chystajà opustit L. A. a odletÄ›t nÄ›kam do TichomoÅ™Ã. PenÄ›z majà dost – Butch nechal vsadit na své vÃtÄ›zstvÃ. Ráno ale zjistÃ, že Fabienne zabalila vÅ¡e potÅ™ebné, kromÄ› jeho zlatých hodinek. Butch se neskuteÄnÄ› rozÄÃlà – mÄ›ly pro nÄ›j obrovskou hodnotu. Musà se teÄ pro nÄ› vrátit do bytu a doufat, že tam na nÄ›j neÄekajà gangsteÅ™i...Situace kolem Bonnie OpÄ›t se vracÃme do rána, kdy Vincent s Julesem vtrhli do bytu mladÃků, aby vyzvedli Marsellusův kufr. Ve vedlejÅ¡Ã mÃstnosti je schovaný jeden z Brettových kamarádů s revolverem v ruce. Jakmile Jules zastÅ™elà Bretta a jeho kamaráda, vybÄ›hne ven a zaÄne po nich zbÄ›sile stÅ™Ãlet. Netrefà se vÅ¡ak ani jednou a gangsteÅ™i ho rozstÅ™ÃlÃ. Jules to považuje za zázrak – Bůh prý odklonil kulky, které je mÄ›ly stoprocentnÄ› zabÃt. V mÃstnosti už kromÄ› nich zůstane jen Marvin, který se krÄà u dveÅ™Ã. Toho si vezmou jako rukojmà a jedou za Marsellusem. V autÄ› Jules pÅ™emÃtá o zázraku. Je rozhodnutý – bylo to znamenà a dnes skonÄà s dráhou zloÄinu, už nebude zabÃjet ani vydÃrat. Vincent tomu nemůže uvěřit. OtoÄà se na zadnà sedadlo, kde mlÄky sedà Marvin, a ptá se ho na jeho názor. Jak ale Jules najede na hrbol, Vincent omylem rozstÅ™elà Marvinovu hlavu po celém autÄ›. Musejà nÄ›co udÄ›lat, auto je celé od krve... + + + (TV Prima)', NULL, 154, 'a2e48cfa-0ac6-4933-b143-d838679025df', 1994), +('12d7e4ca-f382-4356-bf9f-c1bd742ba7c7', '2022-06-17 03:25:41.051', '2022-06-17 03:25:41.052', NULL, 'Kmotr II', 'Kmotr II', 'Jsme vÄ›tÅ¡Ã než U. S. Steel. Al Pacino a Robert De Niro v hlavnÃch rolÃch pokraÄovánà slavné mafiánské ságy, ocenÄ›né Å¡esti Oscary... Mimořádný úspÄ›ch Kmotra (1972) ve svÄ›tových kinech logicky vedl k okamžitým úvahám o natoÄenà pokraÄovánÃ, k nÄ›muž koneckonců vybÃzel i relativnÄ› otevÅ™ený konec originálu. Coppola, který tÃmto snÃmkem zÃskal v Hollywoodu nesmÃrný respekt, ovÅ¡em nejdÅ™Ãv svého vlivu využil k realizaci osobnÃho projektu Rozhovor (vyznamenaného mj. Zlatou palmou na MFF v Cannes, ale komerÄnÄ› neúspěšného). Scénář Kmotra II, jenž je znovu spoleÄným dÃlem autora původnà pÅ™edlohy a režiséra, rozvÃjà dvÄ› dÄ›jové linie. DalÅ¡Ã osudy nového kmotra Michaela Corleona (Al Pacino), ovládajÃcÃho své impérium z rozsáhlého sÃdla v nevadském Lake Tahoe. A zaÄátky mladého Vita Corleona (Robert De Niro) v New Yorku 20. let, jež jsou obsaženy i v PuzovÄ› původnà knize. Michael musà Äelit nejen svým konkurentům z podsvÄ›tÃ, zejména Hymanu Rothovi (pozoruhodná kreace slavného hereckého pedagoga Lee Strasberga), který využÃvá informacà zhrzeného Michaelova bratra Freda (John Cazale), ale také zvýšenému zájmu orgánů spravedlnosti, jež v průbÄ›hu druhé poloviny 50. let, kdy se Kmotr II odehrává, zintenzivnily svou kampaň proti organizovanému zloÄinu. Michael své obchodnà zájmy uhájÃ, pÅ™es nedobrovolné opuÅ¡tÄ›nà hazardnÃch aktivit na revoluÄnà KubÄ›, ovÅ¡em cena je vysoká. PÅ™edÄasnÄ› zestárlý, zahoÅ™klý kmotr je jeÅ¡tÄ› nelÃtostnÄ›jÅ¡Ãm šéfem než jeho otec, ale rodinné vazby, tvoÅ™Ãcà páteÅ™ prvnÃho filmu, zmizely. Michael zůstává osamocený. Bez bratra, kterého nechal zabÃt, i bez manželky, která od nÄ›ho odeÅ¡la... Kmotr II je stejnÄ› výjimeÄným dÃlem jako originál, na který navazuje. Mnozà dokonce tvrdÃ, že lepÅ¡Ãm. Coppola se tu jako režisér pÅ™edstavuje ve Å¡piÄkové formÄ›, navÃc posÃlené neotÅ™esitelným postavenÃm režisérské hvÄ›zdy. Už nemusel bojovat o výši rozpoÄtu jako v pÅ™ÃpadÄ› prvnÃho filmu (který se z finanÄnÃch důvodů mÄ›l původnÄ› odehrávat v souÄasnosti), ani o herce, jež hodlal angažovat. Ve vÅ¡em mÄ›l naprosto volnou ruku. ProzÅ™etelným se ukázalo obsazenà málo známého Roberta De Nira jako mladého Vita Corleona, jehož elektrizujÃcà herectvà tu zÃskává na pÅ™esvÄ›dÄivosti také citlivým využitÃm sicilského dialektu, který v raných scénách nahrazuje angliÄtinu. Jeho osud v nové zemi, kam musel uprchnout ze sicilské vesniÄky, jež mu dala jméno, ostÅ™e kontrastuje s údÄ›lem jeho syna. Vito buduje svoji pozici prakticky z niÄeho, dokáže využÃt každé pÅ™Ãležitosti, neÅ¡tÃtà se násilných prostÅ™edků, pokud je považuje za nutné a efektivnÃ, ale základem je pro nÄ›ho rodina. PokraÄovánà Kmotra se stalo prvnÃm "sequelem", který zÃskal Cenu Akademie za nejlepÅ¡Ã film. Nezůstalo ovÅ¡em u jediného Oscara. Kmotr II v tomto ohledu pÅ™ekonal originál celkem se Å¡esti soÅ¡kami; dalÅ¡Ã cenu mu Akademie udÄ›lila za nejlepÅ¡Ã režii (ta Coppolovi v prvnÃm pÅ™ÃpadÄ› unikla ve prospÄ›ch Boba Fosseho za Kabaret), scénář, výpravu, hudbu (slavný italský skladatel Nino Rota, opominutý u prvnÃho dÃlu kvůli zaÅ™azenà již použitých motivů z jiného filmu, tady spolupracoval s režisérovým otcem Carminem Coppolou) a koneÄnÄ› za fenomenálnà De Nirův výkon ve vedlejÅ¡Ã roli. + + + (ÄŒeská televize)', NULL, 202, '17124574-c42d-453a-a277-408b2c008a1d', 1974), +('6557d3e6-e655-428d-b491-bf4c4fad3839', '2022-06-17 03:25:54.018', '2022-06-17 03:25:54.018', NULL, 'Pán prstenů: SpoleÄenstvo Prstenu', 'Pán prstenů: SpoleÄenstvo Prstenu', 'V dávných dobách byl vykován kouzelný prsten, který vlastnil pán Mordoru Sauron. Jeho moc zaÄal využÃvat k Å¡ÃÅ™enà zla, ale o prsten nakonec v boji pÅ™iÅ¡el, a ten na dlouhá léta zmizel. Nakonec ho naÅ¡el hobit Bilbo PytlÃk, který dÃky nÄ›mu pÅ™estal stárnout. Na naléhavou žádost ÄarodÄ›je Gandalfa pÅ™edá prsten synovci Frodovi. Ten se svými kamarády Samem, SmÃÅ¡kem a Pipinem odcházejà do Hůrky a Gandalf se vydává pro radu za svým uÄitelem, ÄarodÄ›jem Sarumanem. Ten se vÅ¡ak pÅ™idal na stranu zla a zajme ho. S pomocà tajemného hraniÄáře, pÅ™ezdÃvaného Chodec, Frodo a jeho kamarádi uniknou jen o vlásek devÃti Äerným jezdcům, kteřà vyrazili z Temné věže, aby prsten naÅ¡li a pÅ™inesli svému pánovi Sauronovi. Do Roklinky je svolána velká porada lidà a elfů, která rozhodne, že prsten musà být zniÄen. To je možné pouze tam, kde byl prsten zrozen, v ohni Hory osudu. Odvážný Frodo se nabÃdne, že tam prsten odnese. NebezpeÄà je vÅ¡ak pÅ™ÃliÅ¡ veliké, a tak se mu, jako jeho ochránci, postavà po bok ÄarodÄ›j Gandalf, trpaslÃk Gimli, elf Legolas, bojovnÃk Boromir, hobiti Sam, SmÃÅ¡ek a Pipin a také Chodec. Zrodà se SpoleÄenstvo Prstenu, které se vydává na nebezpeÄnou cestu plnou nástrah a nebezpeÄÃ. + + + (TV Nova)', NULL, 172, '8c4dd6b4-6149-49f4-895a-556561ebc0de', 2001), +('bf9cbba5-5fa9-49f1-96ae-dad75cbfb34e', '2022-06-17 03:26:09.04', '2022-06-17 03:26:09.04', NULL, 'Pán prstenů: Návrat krále', 'Pán prstenů: Návrat krále', 'RozhodujÃcà bitva o StÅ™edozem zaÄÃná! ÄŒarodÄ›j Gandalf, elf Legolas a trpaslÃk Gimli spÄ›chajà s dÄ›dicem trůnu Aragornem na pomoc zemi Gondor, která odolává poÄetnému Sauronovu vojsku. Armáda obránců dobra by byla poražena, nebýt toho, že Aragorn vyzval k boji po svém boku zástupy prokletých mrtvých z nitra hory. Když mu mrtvà pomohou v závÄ›reÄném boji o StÅ™edozem, budou zbaveni kletby. MezitÃm hobiti Frodo a Sam se v doprovodu Gluma snažà dostat hluboko do zemÄ› Mordor, kde musà v ohnÃch Hory osudu zniÄit magický Prsten moci. JedinÄ› tak bude sÃla mocného pána temnot Saurona skuteÄnÄ› zlomena. Glumova mysl je omámena mocà prstenu a on udÄ›lá vÅ¡echno proto, aby se mu jeho miláÄek vrátil. A tak na Froda a Sama, kteřà v Glumovi vidà jedinou možnost, jak najÃt cestu k HoÅ™e osudu, Äekajà od jejich průvodce nebezpeÄné nástrahy... + + + (TV Nova)', NULL, 201, '8c4dd6b4-6149-49f4-895a-556561ebc0de', 2003), +('6c6f86f2-8146-44c9-8085-da7ff19d7428', '2022-06-17 03:26:26.129', '2022-06-17 03:26:26.129', NULL, 'MlÄenà jehňátek', 'MlÄenà jehňátek', 'Mladá citlivá agentka FBI Clarice Steriling je pÅ™izvána ke spolupráci do týmu vyÅ¡etÅ™ujÃcÃho sérii vražd. Na pachatele ukazujà jen velmi kruté následky jeho Äinů: Vrah pÅ™ezdÃvaný "Buffalo Bill" stahuje vždycky své obÄ›ti z kůže a potom je házà do Å™eky. Clarice má za úkol vypracovat psychologický portrét pachatele. Jejà nadÅ™Ãzenà ji proto vyÅ¡lou na "konzultaci" za jiným masovým vrahem, psychiatrem dr. Hannibalem Lecterem, který je vÄ›znÄ›n za nejvyÅ¡Å¡Ãch bezpeÄnostnÃch opatÅ™enÃ. Lecter, který zná ze své praxe vraha i jeho motivy a tuÅ¡Ã jeho dalÅ¡Ã postup, držà v rukou vÅ¡echny nitky a pÅ™ivádà mladou Clarice na správnou stopu... + + + (TV Prima)', NULL, 119, '35ca45df-ff22-4e87-8532-d9412df17246', 1991), +('685b5c6f-cca3-4a21-af49-bce5bb8e979c', '2022-06-17 03:26:47.262', '2022-06-17 03:26:47.263', NULL, 'Tenkrát na ZápadÄ›', 'Tenkrát na ZápadÄ›', 'V legendárnÃm westernu Sergia Leoneho, který se ÄásteÄnÄ› natáÄel v Monument Valley, se z pÅ™ÃbÄ›hu pomsty stává epické rozjÃmánà o minulosti Divokého Západu. Aby zÃskal půdu, na nÞ má vést hlavnà tah, najme si chromý železniÄnà baron Morton (Gabriele Ferzetti) zabijáky v Äele se sadistickým Frankem s pomnÄ›nkovýma oÄima (Henry Fonda), který zavraždà majitele pozemku Bretta McBaina (Frank Wolff) i s celou jeho rodinou. ChvÃli poté vÅ¡ak neÄekanÄ› dorazà McBainova novomanželka Jill (Claudia Cardinaleová), která půdu zdÄ›dÃ. Desperát ÄŒejen (Jason Robards) i tajemný psanec Harmonika (Charles Bronson) se rozhodnou vzÃt Jill pod svá ochranná kÅ™Ãdla a zmaÅ™it tak Frankovy plány na zÃskánà jejÃho dÄ›dictvÃ. Postupem Äasu vÅ¡ak vyjde najevo, že Harmonika chce Franka dostat z jiného důvodu... který má co dÄ›lat se smrtÃ. + + + (Cinemax)', NULL, 166, '947ec5dc-6387-4049-8c80-e442ced8268b', 1968), +('10573777-d494-4484-86a5-3220f051b9ae', '2022-06-17 03:31:44.885', '2022-06-17 03:31:44.885', NULL, 'Obecná Å¡kola', 'Obecná Å¡kola', 'Jan SvÄ›rák vás v úsmÄ›vné, nostalgické vzpomÃnce zve do bájeÄných pováleÄných let, kdy zemÄ› vonÄ›la ÄerstvÄ› nabytou svobodou, kluci chodili tátům pro pivo a pedagogická kvalifikace "odbojář a partyzán" dokázala zastÃnit i tradici Jana Ãmose Komenského. Svérázný uÄitel Igor HnÃzdo pÅ™evzal na sklonku roku 1945 tÅ™Ãdu rozjÃvených desetiletých raubÃřů, kteřà svou uÄitelku dokázali pÅ™ivést do blázince. Svým novým svěřencům dal jasnÄ› najevo, že se nehodlá stát jejich dalÅ¡Ã obÄ›tà a vÅ¡em krásným ženám v okolÃ, že by se mohly stát oběťmi jeho Å¡armu. + + + (Ateliéry Bonton ZlÃn)', NULL, 97, 'ce7f0437-bcc5-43f2-b689-448f1daafff1', 1991), +('ad0b4239-6258-46a7-9ab7-ccbcdac29d2c', '2022-06-17 03:27:00.489', '2022-06-17 03:27:00.49', NULL, 'Temný rytÃÅ™', 'Temný rytÃÅ™', 'DalÅ¡Ã Batmanovo dobrodružstvà zaÄÃná. Jeho protivnÃkem je tentokrát záhadný psychopat Joker. VÃtanou posilou by se Batmanovi mohl stát nový státnà zástupce Harvey Dent, idealistický právnÃk odhodlaný bojovat zejména proti mafiÃm ovládajÃcÃm podsvÄ›tà mÄ›sta. Dent chodà shodou okolnostà s Rachel, kterou Batman, alias milionář Bruce Wayne, také miluje. ÄŒÃnský obchodnÃk Lau, se kterým Wayne odmÃtne obchodovat, navrhne gothamským mafiánským skupinám pro jejich penÃze bezpeÄný úkryt v Hongkongu, kam nesahá Dentova pravomoc. Do jednánà neÄekanÄ› zasáhne Joker, který chce polovinu mafiánských penÄ›z za likvidaci Batmana. Ti to odmÃtnou. Batman vzápÄ›tà Laua unese a dostane z nÄ›j jména mafiánů. Dent rozjede velkou akci, podařà se mu vÅ¡ak dostat za mřÞe jen ménÄ› významné gangstery. VzápÄ›tà Joker vyhlásÃ, že každý den zabije jednoho ÄlovÄ›ka, a bude to dÄ›lat tak dlouho, než Batman veÅ™ejnÄ› pÅ™izná svou identitu a nechá se zatknout... + + + (TV Nova)', NULL, 152, 'c108844d-b56f-4017-b87e-a085fa52ab8d', 2008), +('50a76f76-4bb5-4eb1-9262-999f4c606e23', '2022-06-17 03:27:21.773', '2022-06-17 03:27:21.773', NULL, 'Gran Torino', 'Gran Torino', 'Film Gran Torino vyprávà pÅ™ÃbÄ›h nÄ›kdejÅ¡Ãho opraváře aut a ovdovÄ›lého veterána z války v Koreji Walta Kowalského, který si s pÅ™ibývajÃcÃmi léty uvÄ›domuje, že na nový svÄ›t už nestaÄÃ. VÅ¡ichni jeho sousedé se buÄ odstÄ›hovali, nebo zemÅ™eli. PostupnÄ› je nahradili hmongÅ¡tà imigranti, kterými Walt ze srdce pohrdá, a bezcÃlné partiÄky mladých afroamerických a latinskoamerických výtržnÃků. Podzim svého života tak spÃÅ¡ pÅ™ežÃvá než dožÃvá. Až do oné noci, kdy se mu nÄ›kdo pokusà ukrást jeho chloubu - nablýskaný sporťák Gran Torino. Když se zlodÄ›jům postavÃ, stane se hrdinou, který zmÄ›nà život nejen svým sousedům a chlapci nucenému vstoupit do jednoho z mÃstnÃch gangů, ale pÅ™edevÅ¡Ãm sám sobÄ›. + + + (HBO Europe)', NULL, 116, 'bdab1bf7-04a3-490b-8dd6-4167576f5686', 2008), +('644026a2-28b7-4c13-bd23-7a0e85addcae', '2022-06-17 03:27:30.647', '2022-06-17 03:27:30.648', NULL, 'Matrix', 'Matrix', 'Za vÅ¡Ãm hledej Matrix. Zdál se vám nÄ›kdy sen, který působil naprosto skuteÄnÄ›? Co kdybyste se nemohli probudit? Jak poznáte rozdÃl mezi snÄ›nÃm a realitou? Když záhadná kráska Trinity (Carrie-Anne Moss) zavede poÄÃtaÄového hackera jménem Neo (Keanu Reeves) do tajemného paralelnÃho svÄ›ta, odhalà mu Å¡okujÃcà pravdu - svÄ›t je podvod, propracovaný klam pÅ™ekroucený vÅ¡emocnými stroji umÄ›lé inteligence, která nás ovládá. Neo se pÅ™idává k legendárnÃmu vůdci odboje Morfeovi (Laurence Fishburne) v bitvÄ› za zniÄenà iluze zotroÄujÃcà lidstvo. Každý pohyb, každá sekunda a každá myÅ¡lenka znamená boj o pÅ™ežità - o únik z Matrixu. + + + (HBO Europe)', NULL, 136, 'ea3f40f7-d6d3-4ba2-a726-843b8f0b9c2e', 1999), +('ef87c8b4-ef23-49f8-ae66-7ee19d072394', '2022-06-17 03:27:41.71', '2022-06-17 03:27:41.71', NULL, 'Hodný, zlý a oÅ¡klivý', 'Hodný, zlý a oÅ¡klivý', 'Hodný, zlý a oÅ¡klivý je klasickým westernovým pÅ™ÃbÄ›hem o chamtivosti a pomstÄ› uprostÅ™ed bÄ›snÄ›nà obÄanské války Severu proti Jihu. PodvodnÃk, desperát a oÅ¡klivec Tuco (Eli Wallach) je hledaný ve Ätrnácti okresech a na jeho hlavu je vypsaná odmÄ›na dvou tisÃc dolarů. Má ale parťáka, hezouna Joea, zvaného BlonÄák (Clint Eastwood), který vždy vÄas pÅ™estÅ™elà provaz, na nÄ›mž se ho chystá Å¡erif povÄ›sit a pÅ™i spoleÄném útÄ›ku si rozdÄ›là odmÄ›nu. OvÅ¡em jen do dne, kdy jejich habaÄůra pÅ™estane BlonÄáka bavit a nechá Tuca uprostÅ™ed rozpálené pouÅ¡tÄ› sedmdesát mil od nejbližšÃho mÄ›sta. Vzájemná pomsta je spoleÄným jmenovatelem jejich vztahu, aÅ¥ jsou od sebe bývalà partneÅ™i jakkoliv daleko. Cesty osudu je vÅ¡ak nakonec zase svedou dohromady v podobÄ› neÄekané zprávy o zakopaném pokladu. Každý z nich vÅ¡ak zná jen polovinu tajemstvÃ, a tak chtÄ› nechtÄ› musà cestovat spolu. Stejnou stopu vÅ¡ak sleduje i tÅ™età muž, zlý Setenza, zvaný KrásnooÄko (Lee Van Cleef), jemuž se té zajÃmavé informace dostalo také a on ji rozhodnÄ› hodlá prověřit. + + + (ÄŒeská televize)', NULL, 161, '947ec5dc-6387-4049-8c80-e442ced8268b', 1966), +('07c5648d-d5cb-4e17-9833-8c5487caabd0', '2022-06-17 03:27:48.636', '2022-06-17 03:27:48.637', NULL, 'Dobyvatelé ztracené archy', 'Dobyvatelé ztracené archy', 'Profesora archeologie, Indiana Jonese, navÅ¡tÃvà ve Å¡kole dva muži z armádnà rozvÄ›dky. Informujà ho, že nacisté zÅ™ejmÄ› objevili mÃsto, kde má být ukryta slavná archa úmluvy, schránka, do nÞ Židé uložili desky s deseti pÅ™ikázánÃmi, které dostal MojžÃÅ¡ od Boha. Indiana dostává nabÃdku, aby archu naÅ¡el a nacistům ji odvezl pÅ™Ãmo pÅ™ed oÄima. Armáda zaplatà výdaje. Indiana na nabÃdku pÅ™istoupà a odlétá do Nepálu, kde se má nacházet u jeho známé Mary talisman, který může pomoci pÅ™i hledánà archy. Indiana sice Mary objevÃ, ale také zjistÃ, že jsou mu v patách nacisté. Ti Mary pÅ™epadnou a snažà se ji o talisman pÅ™ipravit. NaÅ¡tÄ›stà ji Indiana zachránà a s talismanem oba odletà do Káhiry. Tady se Indiana dozvà od svého pÅ™Ãtele Sallaha podrobnosti ohlednÄ› nÄ›meckého postupu vykopávek. Indy zjistÃ, že s NÄ›mci spolupracuje jeho dávný nepÅ™Ãtel, Francouz Belloq. To už ale i NÄ›mci vÄ›dÃ, že Indy s Mary dorazili do Káhiry, a pokusà se oba zabÃt. To se jim sice nepovede, nicménÄ› podařà se jim unést Mary. Indy a Sallah se vetÅ™ou na nÄ›mecké archeologické naleziÅ¡tÄ› a Indy se spustà do mÃstnosti s modelem původnÃho umÃstÄ›nà archy. Tady dÃky amuletu objevà mÃsto, kde má kopat. Indy a Sallah se na toto mÃsto v noci vypravà a za pomoci nÄ›kolika dÄ›lnÃků skuteÄnÄ› najdou hrobku, ve které je archa uložena. Bohužel NÄ›mci je spatřà a Indyho a Sallaha obklÃÄÃ. PoÄkajà si, až Indy a jeho lidé archu z hrobky vyzvednou, a následnÄ› do hrobky za Indym shodà i Mary... + + + (TV Prima)', NULL, 115, '641a6488-49a1-4df9-aac4-0980e4eb9047', 1981), +('845f7ea6-82ef-4940-8bcc-c5ac2bd611f4', '2022-06-17 03:28:01.54', '2022-06-17 03:28:01.54', NULL, 'Rain Man', 'Rain Man', 'Jeden z nejúspěšnÄ›jÅ¡Ãch amerických filmů osmdesátých let vyprávà pÅ™ÃbÄ›h egoistického Charlieho Babbitta (Tom Cruise), jenž žije jen svým byznysem. PÅ™i projednávánà poslednà vůle svého otce, s nÃmž se léta nestýkal, zjiÅ¡Å¥uje, že má starÅ¡Ãho bratra, autismem postiženého Raymonda (Dustin Hoffman), o kterém nemÄ›l tuÅ¡enÃ. Na dlouhé cestÄ› z útulku poblÞ Cincinnati (odkud Charlie svého bratra unese) do Los Angeles se oba sourozenci poznávajà a do té doby povrchnà a sebestÅ™edný Charlie se pomalu mÄ›nà v lidskou bytost... PÅ™esvÄ›dÄivÄ› napsaný pÅ™ÃbÄ›h se silným humanistickým akcentem dovednÄ› mÃsà sentiment s humorem a využÃvá herectvà obou hlavnÃch pÅ™edstavitelů. Dustin Hoffman podává v obtÞné roli, na niž se dlouho pÅ™ipravoval, zcela mimořádný výkon a dobÅ™e mu sekunduje i Tom Cruise ve zdaleka ne tak efektnà úloze jeho bratra. Film se stal velkým diváckým hitem prakticky na celém svÄ›tÄ› a zÃskal také Å™adu ocenÄ›nÃ, mj. Zlatého medvÄ›da na MFF v BerlÃnÄ› a ÄtyÅ™i Ceny Americké akademie (nejlepÅ¡Ã film, režie, scénář a herecký výkon v hlavnà roli – Dustin Hoffman). Název filmu je zkomoleninou Raymondova jména, jež Charliemu jako jediná vzpomÃnka utkvà v pamÄ›ti. + + + (ÄŒeská televize)', NULL, 133, '32ab1439-a1b1-49ff-8840-d7530a10dbee', 1988), +('bd914599-0e2c-4eb8-a516-1355780f512c', '2022-06-17 03:28:14.516', '2022-06-17 03:28:14.516', NULL, 'Sedm stateÄných', 'Sedm stateÄných', 'Nezapomenutelnà pistolnÃci vyrážejà do boje proti banditům... Obyvatelé malé mexické vesnice umÄ›jà zacházet s motykami, ale ne s kolty a puÅ¡kami. Skoro vÅ¡echno, co se jim podařà lopotnÄ› vypÄ›stovat, musejà proto odevzdávat zloÄinnému banditovi Calverovi a jeho mužům. Jednoho dne vÅ¡ak dojde trpÄ›livost i jim. TÅ™i z nich se proto vydajà k americké hranici. Tam by totiž mohli najÃt nÄ›koho, kdo je nauÄà bojovat a pomůže jim postavit se Calverovi na odpor. Jako prvnà pÅ™ijme jejich skromnou nabÃdku sympatický holohlavý pistolnÃk Chris. Ten se také ujme úkolu zÃskat dalÅ¡Ã muže. Do boje proti CalverovÄ› ÄtyÅ™icetihlavé bandÄ› nakonec vyjÞdà sedm zkuÅ¡ených pistolnÃků: chladnokrevný Chris, bývalý kovboj Vin, mladÃÄek Chico, ranaÅ™ Bernardo, mlÄenlivý samotář Britt, psanec Lee a spiklenecký Harry… Legendárnà western Johna Sturgese nenà tÅ™eba Äeským divákům pÅ™edstavovat. SnÃmek z roku 1960 vznikl jako remake slavného japonského dramatu režiséra Akiry Kurosawy Sedm samurajů (1954). Jak japonský originál, tak i americká verze patřà do zlatého fondu svÄ›tové kinematografie. + + + (ÄŒeská televize)', NULL, 123, 'ccf8809f-6dbc-45b8-a796-3e04dc3076db', 1960), +('1255f864-0d0b-487f-b2b7-998a5a895cdd', '2022-06-17 03:28:31.478', '2022-06-17 03:28:31.479', NULL, 'VyÅ¡Å¡Ã princip', 'VyÅ¡Å¡Ã princip', 'Slavný film o zradÄ›, kolaboraci a pÅ™edevÅ¡Ãm o morálnà odpovÄ›dnosti jednotlivce, se odehrává na malém mÄ›stÄ› v dobÄ› zaÄÃnajÃcà heydrichiády. Sledujeme osud třà nevinných maturantů, kteřà se stanou obÄ›tà msty, jež v dané dobÄ› nemůže mÃt jiné, než tragické vyústÄ›nÃ. + + + (Filmexport)', NULL, 102, 'fe3ffb22-b415-4860-82ef-4f6f07e64c55', 1960), +('ad68fefc-dafa-41d5-b45a-2e13e3866c06', '2022-06-17 03:28:42.455', '2022-06-17 03:28:42.456', NULL, 'Indiana Jones a Poslednà křÞová výprava', 'Indiana Jones a Poslednà křÞová výprava', 'PÃÅ¡e se rok 1938 a Indiana Jones působà jako uÄitel archeologie na univerzitÄ›. Jednoho dne se setká s podnikatelem a milovnÃkem umÄ›nÃ, Walterem Donovanem, který mu oznámÃ, že pÅ™i hledánà Svatého grálu se ztratil jeho otec. Indiana Jones se ihned vydává na mÃsto poslednÃho působenà otce, do Benátek. Tady se setkává s nÄ›meckou doktorkou Elsou, která ho pÅ™ivede do mÃstnà knihovny, kde se otec Indiany ztratil. Indiana zde velmi brzy najde hrobku rytÃÅ™e z prvnà křÞové výpravy (knihovna je ve skuteÄnosti starým kostelem) a v nà dalÅ¡Ã stopu, která má hledaÄe pÅ™ivést k mÃstu, kde je kdesi v pouÅ¡ti schován Svatý grál. To už vÅ¡ak Indianu a Elsu pronásledujà neznámà útoÄnÃci. Indiana se jich zbavà a od poslednÃho z nich se dozvÃ, že se jedná o strážce Svatého grálu. DalÅ¡Ã informaci, kterou od strážce grálu Indiana zÃská, je mÃsto, kde je nacisty držen archeologův otec. Indiana se s Elsou vypravà do Rakouska ho osvobodit. Otce najde na starém hradÄ›, ale zde se ukáže, že Elsa je ve skuteÄnosti ve službÄ› nacistů a že jà jde o notes, který Indiana dostal poÅ¡tou od svého otce. V notesu se totiž skrývajà důležité poznámky, které majà pomoci pÅ™i zÃskánà Svatého grálu. Indiana o notes nechtÄ›nÄ› pÅ™ijde, když mu ho zabavà nacistický důstojnÃk. Nacistům právÄ› o tento notes celou dobu Å¡lo. Zdá se, že Indiana a jeho otec prohráli a že jim hrozà už jen smrt za strany nacistů. To vÅ¡ak nenà pravda. Indiana se svým otcem z hradu, kde jsou nacisty drženi, dokážou utéct. Ihned se vypravà do BerlÃna, kde vyhledajà Elsu (dostala notes od důstojnÃka) a notes jà opÄ›t vezmou. NáslednÄ› z BerlÃna uprchnou pomocà vzducholodÄ›, letadla a auta, když se pÅ™itom musejà zbavit svých pronásledovatelů. Indiana a jeho otec pokraÄujà na StÅ™ednà východ, aby zde za pomoci svého pÅ™Ãtele Marcuse grál naÅ¡li. V patách jim vÅ¡ak postupuje i nacistická výprava vedená nÄ›meckým plukovnÃkem, Walterem Donovanem a Elsou... + + + (TV Prima)', NULL, 127, '641a6488-49a1-4df9-aac4-0980e4eb9047', 1989), +('5d6dacb2-63c4-45fc-b0f4-e24580b3c846', '2022-06-17 03:28:59.653', '2022-06-17 03:28:59.653', NULL, 'VetÅ™elec', 'VetÅ™elec', 'VesmÃrná loÄ Nostromo mÃřà zpÄ›t na Zemi, astronauti spÃ. Náhle dojde k jejich automatickému probuzenà – nikdo nevÃ, co se dÄ›je, protože jsou jeÅ¡tÄ› velmi daleko od cÃle cesty. ProstÅ™ednictvÃm centrálnÃho poÄÃtaÄe zjistÃ, že pÅ™ijÃmaÄe zachytily signál SOS z blÃzké planety. Posádka je povinna vÄ›c vyÅ¡etÅ™it. Vyslaný modul má s pÅ™istánÃm velké problémy. PÅ™esto nÄ›kteřà na průzkum. V jeskynnÃm komplexu objevà podivný organizmus, který vypadá jako kolonie vajÃÄek. PoÄÃtaÄ mateÅ™ské lodi mezitÃm deÅ¡ifruje zprávu jako varovánÃ, ne jako volánà o pomoc. VÅ¡ichni jsou okamžitÄ› odvoláni. Jenže jedno z vajÃÄek se otevÅ™e a jakási hmota ve tvaru chobotnice se bÄ›hem setiny sekundy pÅ™isaje na pÅ™ilbu jednoho z astronautů, pÅ™esnÄ›ji Å™eÄeno na jeho obliÄej. PÅ™es odpor Ripleyové, že je proti bezpeÄnostnÃm pÅ™edpisům brát na palubu cokoli neznámého, otevÅ™e Ash dveÅ™e a vÅ¡echny vpustÃ. Po nÄ›jaké dobÄ› je nalezen cizà organismus na podlaze, sám odpadl. Vypadá to, že se postižený těšà dobrému zdravÃ. PÅ™i spoleÄném jÃdle vÅ¡ak stolujÃcà zažijà hrůzné pÅ™edstavenÃ. PÅ™ed jejich oÄima vyleze z astronautova bÅ™icha nÄ›jaký tvor, a než staÄà kdokoli cokoli podniknout, bleskovou rychlostà zmizà v obrovských prostorách lodi. ZaÄÃná noÄnà můra – monstrum postupnÄ› likviduje posádku a zdá se, že je nezniÄitelné… + + + (TV Prima)', NULL, 117, '4d6704cb-02bc-4283-a4c2-074dfa1afd9c', 1979), +('d5839e47-ad9c-4e22-b30f-bcd8bb7138f6', '2022-06-17 03:29:12.857', '2022-06-17 03:29:12.858', NULL, 'Rivalové', 'Rivalové', 'Závratná rychlost, adrenalin proudÃcà v žilách, krásné dÃvky a nezkrotná touha po vÃtÄ›zstvÃ. Závody Formule 1 jsou mÃstem, kde jediná chyba může znamenat smrt. Na tÄ›chto okruzÃch spolu soupeřà dva odvÄ›cà rivalové. James Hunt je neÅ™Ãzená stÅ™ela, neodolatelný playboy a brilantnà řidiÄ. Niki Lauda je dokonalý profesionál, vždy preciznà a disciplinovaný. Film Rivalové vyprávà skuteÄný pÅ™ÃbÄ›h dvou pilotů, kteřà jsou soky nejen na okruzÃch, ale také ve skuteÄném životÄ›. PÅ™estože jsou soupeÅ™i, jsou také jeden pro druhého inspiracÃ. PÅ™es jejich rozdÃlnost je v životÄ› pojà zvláštnà přátelstvÃ. Ale rivalita je žene ke stále riskantnÄ›jÅ¡Ãm výkonům. Titul mistra svÄ›ta může zÃskat jen jeden... + + + (Bioscop)', NULL, 123, '0c4cb1ea-94e7-4f80-9693-ae8d918eca73', 2013), +('59dca9d0-288b-4155-9af3-cae4e763f54a', '2022-06-17 03:29:34.087', '2022-06-17 03:29:34.088', NULL, 'Le Mans ''66', 'Le Mans ''66', 'V roce 1959 je Carroll Shelby (Matt Damon) na absolutnÃm vrcholu, vyhrál nejtěžšà motoristický závod na svÄ›tÄ› 24 hodin Le Mans. Po nejvÄ›tÅ¡Ã triumfu tohoto neohroženého Texasana pÅ™ijde drtivá rána – lékaÅ™i odhalená srdeÄnà vada mu znemožnà pokraÄovat v závodÄ›nÃ. Shelby tak zaÄÃná novou kariéru jako velmi vynalézavý konstruktér. Spolupracuje s týmem, do nÄ›jž patřà i vynikajÃcà zkuÅ¡ebnà jezdec a britský Å¡ampión Ken Miles (Christian Bale). Miles je nejen Å¡piÄkovým závodnÃkem oddaným své rodinÄ›, ale je také nesnesitelnÄ› arogantnà a naprosto neschopný jakéhokoliv kompromisu. A právÄ› tento tým automobilových Å¡Ãlenců si najme Henry Ford II, aby pro jeho automobilku navrhli a postavili dokonalé závodnà auto. Ford se totiž rozhodnÄ›, že se pomstà Enzo Ferrarimu, za to, že nakonec odmÃtl domlouvané spojenà své automobilky s Ford Motor Company. Vozy stáje Ferrari vÃtÄ›zà na okruhu v Le Mans nepÅ™etržitÄ› od roku 1960 až do roku 1965. Shelby, Miles a jejich malý tým jsou odhodláni tomu uÄinit s pomocà vozu Ford GT40 rázný konec. Proti nim stojà neporazitelné Ferrari, fyzikálnà zákony i jejich vlastnà osobnà démoni. Navzdory pÅ™ekážkám a omezenÃm, které jim do cesty házà i samotný Ford, musà vyvinout revoluÄnà vozidlo, které pÅ™eválcuje každého konkurenta. Jejich úsilà si ale vybÃrá nemalou daň – tÄ›mto odvážným mužům to ale za vÃtÄ›zstvà stojÃ. + + + (CinemArt)', NULL, 152, '2ee30665-fd1a-434d-9aef-30277778de1d', 2019), +('76b033f4-9a8a-4c54-9f85-3b63c7b62b35', '2022-06-17 03:29:55.175', '2022-06-17 03:29:55.176', NULL, 'Smrtonosná past', 'Smrtonosná past', 'Policista John McClane pÅ™ilétá na Vánoce do Los Angeles za svou manželkou Holly a dÄ›tmi. Holly pracuje pro japonskou spoleÄnost Nakatomi, v jejÃmž mrakodrapu se právÄ› koná vánoÄnà veÄÃrek. Holly odeÅ¡la z New Yorku za pracÃ, zatÃmco John tam zůstal. Nynà zjiÅ¡Å¥uje, že Holly použÃvá v práci své jméno za svobodna. Jde se do koupelny upravit a mezitÃm do budovy pÅ™ijÞdÄ›jà ozbrojenà muži. Zabijà strážce, uzamknou výtahy, vÅ¡echny vchody a odpojà telefony. Potom proniknou na veÄÃrek a John z koupelny zaslechne stÅ™elbu. Podařà se mu nepozorovanÄ› utéct do vyÅ¡Å¡Ãho patra, kam pozdÄ›ji útoÄnÃci odvedou Å™editele spoleÄnosti Nakatomi. ChtÄ›jà po nÄ›m pÅ™Ãstupové heslo k poÄÃtaÄi, který mimo jiné Å™Ãdà trezor, ze kterého chtÄ›jà ukrást dluhopisy v hodnotÄ› stovek milionů... Ředitel se jim snažà vysvÄ›tlit, že trezor má sedm zámků a on zná kód pouze k jednomu – a i ten jim odmÃtne dát. Hans, vůdce útoÄnÃků, ho zastÅ™elÃ. John spustà požárnà alarm, aby pÅ™ivolal pomoc, ale útoÄnÃci zavolajà hasiÄům, že poplach je faleÅ¡ný. DÃky tomu ale zjistili, že je nÄ›kdo v hornÃm patÅ™e, a poÅ¡lou tam muže se zbranÃ... John teroristu zabije, sebere mu zbraň a vysÃlaÄku a jeho tÄ›lo poÅ¡le dolů výtahem. Bratr zavraždÄ›ného, Karl, chce Johna ihned najÃt a pomstÃt se. John použije ukradenou vysÃlaÄku a snažà se pÅ™ivolat pomoc, ale jeho volánà slyÅ¡Ã i teroristé a dojde jim, že John bude nÄ›kde na stÅ™eÅ¡e. Volánà zachytà i policie, ale nevěřà Johnovi, že se nÄ›co dÄ›je. Když pak ale ve vysÃlaÄce zaslechnou stÅ™elbu, poÅ¡lou tam na kontrolu hlÃdku. Seržant Powell dojede do Nakatomi, promluvà si se strážným, což je ale nastrÄený terorista, a v klidu odjÞdà s tÃm, že nic podezÅ™elého nenaÅ¡el. Když ho John vidà odjÞdÄ›t, vyhodà z okna mrtvolu dalÅ¡Ãho teroristy, kterého pÅ™i pÅ™estÅ™elce zabil, a zaÄne z okna stÅ™Ãlet... + + + (TV Prima)', NULL, 131, 'c31e5574-74dc-4322-b9e9-c74081406a06', 1988), +('de0a75c1-e45a-4bae-8550-bc9fcccafb07', '2022-06-17 03:30:06.069', '2022-06-17 03:30:06.07', NULL, 'VetÅ™elci', 'VetÅ™elci', '57 let po tvrdé zkouÅ¡ce s mimozemským tvorem je Ellen Ripleyová v hyperspánku zachránÄ›na dálkovým záchranným týmem. Dojde dokonce k vyÅ¡etÅ™ovánÃ, pÅ™i kterém ji chtÄ›jà obvinit ze zniÄenà tvora, o kterého vysoce postavenà vojenÅ¡tà pohlaváři stáli. Nakonec je osvobozena, je jà ale nabÃdnuta úÄast na jiné výpravÄ›: na planetÄ›, odkud vetÅ™elec pocházel, mezitÃm vznikla kolonie s lidskými obyvateli. Ti se nynà odmlÄeli a chystá se mise složená z vojáků námoÅ™nà pÄ›choty, kteřà majà na planetu sestoupit a vyÅ¡etÅ™it, co se tam stalo. Ripleyová se svými znalostmi nebezpeÄného tvora by se v nà uplatnila. Ta se rozhodne takto skonÄit s noÄnÃmi můrami a nepÅ™Ãjemnými vzpomÃnkami na monstrum – vetÅ™elce a s nabÃdkou souhlasÃ. Znovu se tedy ocitá na nehostinné planetÄ›, kde nacházejà kolonii opuÅ¡tÄ›nou. Jediný, koho najdou, je malá vystraÅ¡ená holÄiÄka. Brzy zjistÃ, že vÅ¡ichni obyvatelé se stali oběťmi vetÅ™elce – ne vÅ¡ak jednoho. VetÅ™elci se ponÄ›kud rozmnožili a planeta je jimi zcela obsazena… + + + (TV Prima)', NULL, 137, '46cb4b90-d2e9-4b2f-87ef-371d9eea3cc9', 1986), +('4fa020fd-978c-4e18-a697-d28a13a63573', '2022-06-17 03:30:31.461', '2022-06-17 03:30:31.461', NULL, 'Podraz', 'Podraz', 'Z jedné z kancelářà mafiánského bosse Doyla Lonnegana odcházà poslÃÄek s tržbou 11 tisÃc dolarů, kterou má doruÄit do Chicaga. Na cestÄ› k taxi je ovÅ¡em svÄ›dkem fiktivnÃho pÅ™epadenà a nabÃdne pomoc. Starý zranÄ›ný Äernoch žádá, aby odnesl penÃze na jednu adresu. Muž cÃtÃ, že by si mohl krásnÄ› pÅ™ivydÄ›lat, ale až v taxi zjistÃ, že byl podveden a oloupen. To se podaÅ™ilo dvÄ›ma podvodnÃkům Johnnymu Hookerovi a Lutheru Colemanovi, kteřà ani ve snu netuÅ¡ili, koho to vlastnÄ› okradli. VeÄer se sejdou u Luthera, kde si rozdÄ›là uloupené penÃze. Luther se rozhodne skonÄit s podvody a Johnnymu dá adresu faleÅ¡ného hráÄe pokeru Henryho Gondorffa, který by ho mohl nauÄit velké vÄ›ci. Když se Hooker vracà domů, sbalà ho chamtivý detektiv Snyder, který už vÃ, co udÄ›lali a komu ty penÃze vlastnÄ› patÅ™ily. Za mlÄenà požaduje dva tisÃce dolarů. Hooker mu dá tisÃc faleÅ¡ných dolarů a pak se rychle vracà k Lutherovi, ale je pozdÄ›. Lonneganovi lidé Luthera zabili. Johnny se rozhodne pomstÃt Lutherovu smrt a spoleÄnÄ› s Henrym naplánujà léÄku, pÅ™i které by mÄ›l být Lonnegan definitivnÄ› zniÄen. + + + (TV Nova)', NULL, 129, '5a332614-c1b9-47c2-b783-6fb920c64717', 1973), +('f9e0e24c-4392-4050-b89e-6e01aef459d8', '2022-06-17 03:30:46.714', '2022-06-17 03:30:46.715', NULL, 'Zachraňte vojÃna Ryana', 'Zachraňte vojÃna Ryana', '6. Äervna 1944 se v Normandii spoleÄnÄ› s tisÃcovkami dalÅ¡Ãch spojeneckých vojáků vylodà také kapitán Miller se skupinou svých mužů. NÄ›kteřà Millerovi lidé vÅ¡ak v bojÃch s nacistickým nepÅ™Ãtelem na pláži zemÅ™ou. V ústÅ™edà ve Washingtonu se mezitÃm generál Marshall dozvÃdá, že bÄ›hem invaze zemÅ™eli tÅ™i ze ÄtyÅ™ synů rodiny Ryanových. Aby zmÃrnil ztrátu jejich matky, vydává Marshall rozkaz, na základÄ› kterého má být poslednà pÅ™eživÅ¡Ã syn James Ryan pÅ™iveden domů. SplnÄ›nÃm tohoto rozkazu je pověřen Miller a jeho sedm mužů. Vydávajà se setkat se 101. divizÃ, protože k nà sahajà poslednà Ryanovy stopy. Jeden z Millerových mužů, desátnÃk Caparzo, je zastÅ™elen nÄ›meckým sniperem. Miller zjiÅ¡Å¥uje, že James Ryan u 101. divize nenà jejich hledaným mužem, nicménÄ› se setkává s jeho známým, který tvrdÃ, že Ryan a jeho jednotka se vydali bránit most ve mÄ›stÄ› Ramelle. Miller a jeho skupina se také vydávajà do Ramelle, ale cestou narazà na skupinu NÄ›mců, se kterými chce Miller bojovat, i když to nenà nutné. AÄkoliv ameriÄtà vojáci nÄ›mecké porazÃ, dalÅ¡Ã z Millerových mužů umÃrá. Miller se rozhodne propustit pÅ™eživÅ¡Ãho nÄ›meckého vojáka, který si vysloužil pÅ™ezdÃvku PlavÄÃk Willie. Miller a jeho muži pÅ™icházejà do Ramelle, kde se setkávajà s Ryanem. Ten vÅ¡ak s nimi odmÃtá opustit pozici s tÃm, že chce pomoci pÅ™i bránÄ›nà mostu. Miller se nakonec rozhodne, že on i jeho muži se do bránÄ›nà mostu zapojà také... + + + (TV Prima)', NULL, 163, '641a6488-49a1-4df9-aac4-0980e4eb9047', 1998), +('c272df44-94b4-4fb5-8ee2-d09432e38176', '2022-06-17 03:30:59.742', '2022-06-17 03:30:59.743', NULL, 'Leon', 'Leon', 'OsamÄ›lý zabiják Leon žije v malém bytÄ› uprostÅ™ed New Yorku. Jeho pracà je „ÄiÅ¡tÄ›nÓ a zbavovánà se nepohodlných lidà pro mafiána Tonyho. Leonův soused v domÄ› Lando je zapojený do obchodu s drogami, ve kterém jsou spolu s nÃm namoÄeni i policisté z protidrogového, vedenà maniakálnÃm agentem Stansfieldem. Stansfield a jeho lidé Landovu rodinu zabijÃ, vÄetnÄ› manželky, dcery a malého syna. Leon celý masakr sleduje kukátkem. Z rodiny pÅ™ežije jen dvanáctiletá Mathilda, kterou u sebe Leon ukryje. Když Mathilda zjistÃ, že Leon se živà jako nájemný vrah, požádá ho, aby jà pomohl zbavit se vrahů jejÃho bratra. Leon ji nejprve odmÃtne, ale poté pÅ™istoupà na jejà nabÃdku, že se ona o nÄ›j bude starat a on ji nauÄà zabÃjenà lidÃ. ZatÃmco Leon ji uÄà zacházet se zbranÄ›mi a vysvÄ›tlà jà svoji zásadu, že nikdy nevraždà dÄ›ti a ženy, Mathilda na oplátku Leona nauÄà ÄÃst a psát. Leon mezitÃm zabije jednoho ze Stansfieldových agentů a z obavy o vlastnà bezpeÄnost požádá Tonyho, aby v pÅ™ÃpadÄ›, že by se s nÃm nÄ›co stalo, jeho naÅ¡etÅ™ené penÃze pÅ™edal MathildÄ›. Ta mezitÃm zjiÅ¡Å¥uje, že jejÃho bratra zabil Stansfield, a vydává se do jeho kanceláře zabÃt ho... + + + (TV Prima)', NULL, 105, 'fe855b14-b95c-422a-adfc-fc706e60b03a', 1994), +('96c5ff43-25d1-4758-aafb-27c231d4e958', '2022-06-17 03:31:16.786', '2022-06-17 03:31:16.787', NULL, 'S Äerty nejsou žerty', 'S Äerty nejsou žerty', 'V jednom malém knÞectvà žijà vÅ¡ichni, kdo ve správné pohádce nesmÄ›jà chybÄ›t. Stárnoucà knÞe, kterého už nebavà vládnout, jeho dvÄ› dcery - zlomyslná, nafoukaná Angelina a skromná, pohledná Adélka, vychytralý správce, který se stará jen o to, jak naplnit vlastnà měšec na úkor knÞecà pokladny, Äestný Petr, kterého se zlá a chtivá macecha Dorota Máchalová snažà se správcem pÅ™ipravit o rodný mlýn. A taky je tu peklo, které peÄlivÄ› sleduje vÅ¡echny Å¡patné skutky a v pravou chvÃli ráznÄ› zakroÄÃ. A tak když se Äas naplnÃ, je vyslán mladý Äert Janek, aby pÅ™inesl do pekla zlou Dorotu. Omylem vÅ¡ak pÅ™inese Petrovu hodnou babiÄku, a když se pokouÅ¡Ã chybu napravit, skonÄà s Petrem v knÞecÃm vojsku. Ten pro zmÄ›nu prchal pÅ™ed intrikami správce a jistÄ› by drábům utekl, jenže pak se zdržel, protože s nasazenÃm života zachránil knÞecà dcery, když zastavil jejich koÄár se splaÅ¡enými koňmi. Petr a Janek se skamarádà a Petr se nabÃdne, že Äertovi pomůže dokonÄit úkol. Dokonce i ve dvou vÅ¡ak nebude snadný, protože Dorota má vždy po ruce nÄ›jaké to pÃrko, které je pro Äerta pohromou. + + + (TV Nova)', NULL, 91, 'bfaf47b3-d677-42ff-b1cc-b03ee2c24f87', 1984), +('85263627-30a9-4fbc-b077-7d10208a3e61', '2022-06-17 03:31:27.829', '2022-06-17 03:31:27.83', NULL, 'Amadeus', 'Amadeus', 'StrhujÃcà drama závisti, žárlivosti, intrik a vášnivé lásky k hudbÄ›. Jeden z nejlepÅ¡Ãch filmů historie, ocenÄ›ný osmi Oscary, mj. i za kostýmy Theodora PiÅ¡tÄ›ka.ÄŒeský režisér MiloÅ¡ Forman naÅ¡el bÄ›hem svého amerického působenà osobnà téma v zápase výjimeÄného jedince s pÅ™edstaviteli politické i jiné moci. Ideálnà látku objevil v divadelnà hÅ™e Petera Shaffera Amadeus, která se od svého uvedenà v roce 1981 stala hitem svÄ›tových scén. Geniálnà skladatel Wolfgang Amadeus Mozart se v nà stane obÄ›tà vražedných intrik svého kolegy, dvornÃho skladatele Antonia Salieriho, jenž nedovede unést tÃhu závisti a vlastnà průmÄ›rnosti. PrávÄ› Salieri je – navzdory titulu – hlavnÃm hrdinou divadelnÃho i filmového pÅ™ÃbÄ›hu. Skladatel, posedlý touhou po uznánà a slávÄ›, kvůli splnÄ›nà svých snů uzavÅ™e smlouvu s Bohem. Ten vÅ¡ak zbožnému komponistovi nadÄ›là jen průmÄ›rné hudebnà nadánÃ. GeniálnÃmi schopnostmi naopak obdařà samolibého, nevycválaného a nafoukaného hejska jménem Mozart. Salieri se chce Bohu za tuto zradu pomstÃt tÃm, že jeho miláÄka zprovodà ze svÄ›ta... MiloÅ¡ Forman natoÄil podle Shafferova scénáře naprosto výjimeÄné filmové dÃlo, jež ve své dobÄ› zaznamenalo neoÄekávaný divácký úspÄ›ch a způsobilo dokonce „mozartománii". Ve skvÄ›le vystavÄ›ných dramatických scénách totiž Forman brilantnÃm způsobem využil právÄ› roli hudby. Amadeus zÃskal mimo Å™ady jiných prestižnÃch ocenÄ›nà také osm Oscarů: jako nejlepÅ¡Ã film, dále za režii, za mužský herecký výkon v hlavnà roli (F. Murray Abraham), za scénář podle pÅ™edlohy, výpravu, kostýmy (T. PiÅ¡tÄ›k), masky a zvuk. NepromÄ›nÄ›ná zůstala druhá nominace za hlavnà mužskou roli (Tom Hulce), za kameru (Miroslav OndÅ™ÃÄek) a za stÅ™ih. + + + (ÄŒeská televize)', NULL, 160, '8b8085a3-f1ce-4d2d-a922-7fdac528b8bc', 1984), +('3898e012-8471-485c-9e44-cf876e7f0a6f', '2022-06-17 03:31:58.033', '2022-06-17 03:31:58.034', NULL, '„MareÄku, podejte mi pero!“', '„MareÄku, podejte mi pero!“', '„MareÄku, podejte mi pero!“, pravà staÅ™iÄký pan profesor Hrbolek. OtevÅ™e obávaný notes, vyvolá nÄ›kterého ze svých už obstarožnÃch studentů, a když dotyÄný neumÃ, pÃÅ¡e mu pÄ›t a pravÃ: „Nepotěšil jste mne, chlapÄe, ani já vás nepotěšÃm…“ Znalce a milovnÃky Äeského filmového humoru jistÄ› opÄ›t potěšà komedie z pera Zdeňka SvÄ›ráka a Ladislava Smoljaka, kterou v roce 1976 natoÄil OldÅ™ich Lipský. Navázali na oblÃbené Å¡tudácké veselohry Martina FriÄe. I když Å¡tudáci jsou zde již postarÅ¡Ã, setkáme se zde s typickými postaviÄkami Å¡kolnÃch Å¡kamen – Å¡plhounem, ospalcem, tÅ™ÃdnÃm kaÅ¡parem i notorickými uliÄnÃky. V roli JiÅ™Ãho Kroupy, mistra v továrnÄ› na zemÄ›dÄ›lské stroje, který si neochotnÄ› zvyÅ¡uje kvalifikaci na stejné Å¡kole jako jeho syn Jirka, exceluje Jiřà Sovák. Těšit se můžete také na dalÅ¡Ã oblÃbené herce: Josefa Abrháma, Ivu Janžurovou, JiÅ™Ãho Schmitzera a Å™adu dalÅ¡Ãch. + + + (ÄŒeská televize)', NULL, 91, '9018001f-5ccf-400d-9faa-70241a2aa55f', 1976), +('5a09c1dd-145b-4a5c-a412-849ef3b656ee', '2022-06-17 03:32:07.152', '2022-06-17 03:32:07.153', NULL, 'Star Wars: Epizoda V - Impérium vracà úder', 'Star Wars: Epizoda V - Impérium vracà úder', 'Luke Skywalker se s povstalci proti Impériu schovává na ledové planetÄ› Hoth. PÅ™i jedné z obhlÃdek je Luke pÅ™epaden mÃstnà snÄ›hovou pÅ™ÃÅ¡erou. Ta zabije zvÃÅ™e, na kterém Luke pÅ™ijel, a následnÄ› omráÄeného Luka odtáhne do své ledové jeskynÄ›. Kapitán Han Solo se vypravà Luka do mrazu najÃt. MezitÃm se Luke v jeskyni probudÃ, osvobodà se a po stÅ™etu s pÅ™ÃÅ¡erou uteÄe do ledové pustiny. Zde ho podchlazeného najde Solo, který ho zachránÃ. Druhý den ráno jsou oba vyzvednuti leteckou hlÃdkou, kterou za nimi povstalci vyslali. Je na Äase. Na planetÄ› se objevà stroje a vojáci Impéria, kteřà povstalce na základÄ› pocitů Darth Vadera naÅ¡li. NásledujÃcà stÅ™et neprobÃhá pro povstalce nikterak dobÅ™e, a vedenà povstalců naÅ™izuje evakuaci. Velitelka povstalců, princezna Leia, Han Solo, Chewbacca a robot C-3PO odlétajà na X-Wingu. Luke použije stÃhaÄku Millenium Falcon. Luke vÅ¡ak neletà s ostatnÃmi, ale zamÃřà na planetu Dagobah. Ve chvÃli, kdy totiž umÃral v mrazu, se mu zjevil duch Obi-Wana a poslal ho právÄ› tam. Luke zde má najÃt mistra Yodu. Leia s ostatnÃmi zatÃm uniká pÅ™ed pronásledovateli ve stÃhaÄkách. Solo, který jejich stroj pilotuje, se pokusà pÅ™ed pronásledovateli ukrýt v jeskyni na jednom z ohromných asteroidů, kvůli vesmÃrným parazitům vÅ¡ak musà bezpeÄný úkryt opustit a doletÄ›t na planetu Bespin, kde se hodlá s přáteli ukrýt u svého známého Landa Calrissiana. Ten zde vede malé nelegálnà doly. ZatÃm Luke objevà malého zeleného mužÃÄka, který se mu zprvu zdá ponÄ›kud zmatený. Brzy vÅ¡ak pochopÃ, že právÄ› tento mužÃÄek je mistr Yoda. Yoda zaÄne Luka cviÄit na rytÃÅ™e Jediho. Luke vÅ¡ak svůj výcvik nedokonÄÃ. PÅ™i výcviku má totiž vize, pÅ™i kterých se dozvÃ, že jeho přátelé jsou v nebezpeÄÃ... + + + (TV Prima)', NULL, 124, '4c215c46-2e36-4ec2-a580-7023ee5324a5', 1980), +('148924fd-8d00-4ab8-bfce-4593f1c53d54', '2022-06-17 03:32:28.265', '2022-06-17 03:32:28.265', NULL, 'Cesta do hlubin Å¡tudákovy duÅ¡e', 'Cesta do hlubin Å¡tudákovy duÅ¡e', 'Po úspÄ›chu filmu Å kola základ života se rozhodl Martin FriÄ natoÄit dalÅ¡Ã historky Jaroslava Žáka o Å¡tudácÃch a kantorech. Nechal se inspirovat půvabnou knÞeÄkou postÅ™ehů a úvah ze stÅ™edoÅ¡kolského prostÅ™edà Cesta do hlubin Å¡tudákovy duÅ¡e. Jaroslav Žák se také podÃlel spolu s Martinem FriÄem na scénáři. Za základ si vzali starého profesora, který sbÃrá Å¡tudácké kuriozity, navÃc pÅ™idali nesmÃrnÄ› laskavou postavu profesora pÅ™Ãrodopisu Matulku, který teprve za pomoci studentů a profesorského sboru složà na prahu stářà poslednà závÄ›reÄné zkouÅ¡ky. ZbývajÃcà prostor zaplnili studentským humorem a pÅ™ehrÅ¡là prvotÅ™ÃdnÃch rošťáren, kterým opÄ›t kraluje Ladislav PeÅ¡ek jako student KulÃk. FrantiÅ¡ek Filipovský hraje opÄ›t Å¡plhouna, nesmÄ›lého profesora Matulku ztvárnil JindÅ™ich Plachta, matikáře VoboÅ™ila Jaroslav Marvan. V rolÃch studentů si zahráli herci, kterým bylo v dobÄ› natáÄenà téměř tolik jako jejich profesorům. NapÅ™. „studentům“ Ladislavu PeÅ¡kovi bylo 33 a FrantiÅ¡ku Filipovskému 32 let, „profesorům“ JindÅ™ichu Plachtovi 40, Jaroslavu Marvanovi 38 a MiloÅ¡i Nedbalovi dokonce 33 let. + + + (ÄŒeská televize)', NULL, 88, '950163f9-c842-4a1f-b195-a2f4c7245bdb', 1939), +('5fb0df28-1b13-4002-8f45-a1dc9d63d1f3', '2022-06-17 03:32:35.235', '2022-06-17 03:32:35.236', NULL, 'Butch Cassidy a Sundance Kid', 'Butch Cassidy a Sundance Kid', 'Dva bankovnÃch lupiÄi a pÅ™Ãležitostnà podvodnÃÄci Butch Cassidy a Sundance Kid se protloukajÃ, jak mohou. Butch vede proslulý gang z DÃry ve zdi, Sundance Kid je nejen bleskurychlý stÅ™elec, ale také si dokáže poradit s kartami. Jeden Älen gangu, Harvey Logan, by rád pÅ™evzal velenÃ. Dostal totiž nápad – proÄ pÅ™epadnout pacifický expres pÅ™evážejÃcà penÃze jen jednou? PÅ™i zpáteÄnà cestÄ› už nikoho ani nenapadne, že by mohlo následovat dalÅ¡Ã pÅ™epadenÃ, a teprve pak tam bude pořádná suma penÄ›z. Butch Logana jakožto potencionálnÃho konkurenta rychle zpacifikuje, jeho nápad vÅ¡ak s pomocà dynamitu spoleÄnÄ› se Sundancem uskuteÄnÃ. Zdá se ale, že to nebyl nejÅ¡Å¥astnÄ›jÅ¡Ã tah: pan Harriman, kterému penÃze ukradli, si najme nejlepÅ¡Ã stopaÅ™e a „lovce lidÓ v Äele s Joe Leforcem. A Butch se Sundancem se pronásledovatelů ne a ne zbavit… Sundance Kid má pÅ™Ãtelkyni, půvabnou uÄitelku Ettu, se kterou se brzy spřátelà i Butch. OvÅ¡em jejich radost kalà fakt, že majà neustále v patách Harrimanovy muže. Málo platné, že se nakonec pÅ™i jedné z honiÄek, kdy už nemajà kam uniknout, odhodlajà skoÄit z vysoké skály pÅ™Ãmo do peÅ™ejÃ, aÄkoli Sundance neumà plavat. V novinách se sice objevà domnÄ›nky, že mohli zahynout, oba ale vÄ›dÃ, že je jejich pronásledovatelé nenechajà na pokoji, dokud je neuvidà mrtvé... A tak Butch pÅ™ijde s nápadem odjet do BolÃvie. Ta je snad dostateÄnÄ› daleko, aby se zbavili dotÄ›rných pronásledovatelů. Nakonec se k nim pÅ™idá i Etta: ve svých Å¡estadvaceti letech je stále jeÅ¡tÄ› svobodná a kromÄ› dobrodružstvà s obÄ›ma přáteli vede celkem nudný život. ProÄ by si ho tedy nezpestÅ™ila cestou do BolÃvie? Jediné, co nechce nikdy vidÄ›t, je, jak budou Butch a Sundance umÃrat… Prvnà dojmy z BolÃvie jsou dÄ›sivé: vlak je vysadà uprostÅ™ed pustiny, kde se vedle polorozboÅ™eného nádražà rochnà jen skupinka prasat. Sundance zuÅ™Ã, nakonec ale zaÄnou opÄ›t pÅ™epadávat banky. ZatÃm to jde snadno, ale brzy se v zemi stanou známà a policie na nÄ› organizuje honiÄky. Situace se ovÅ¡em zdramatizuje ve chvÃli, kdy oba muži zjistÃ, že neúnavný Leforce je dostihl i zde... + + + (TV Prima)', NULL, 110, '5a332614-c1b9-47c2-b783-6fb920c64717', 1969), +('275dfe53-0deb-46b4-8c6c-44dbda0cd69d', '2022-06-17 03:32:56.573', '2022-06-17 03:32:56.574', NULL, 'L. A. - PÅ™ÃsnÄ› tajné', 'L. A. - PÅ™ÃsnÄ› tajné', 'VÅ¡echno je úplnÄ› jinak, ale zkuste to dokázat! Kriminálnà pÅ™ÃbÄ›hy "drsné Å¡koly" mÄ›ly v minulosti nejen velký úspÄ›ch mezi Ätenáři, ale také zÃskaly dlouhou Å™adu napodobitelů. Mezi ty nejlepÅ¡Ã patřà bezesporu spisovatel James Ellroy, podle jehož stejnojmenného románu natoÄili ameriÄtà tvůrci svůj film. Detektivové Bud White, Jack Vincennes a Ed Exley pátrajà v Los Angeles po pachatelÃch nÄ›kolika vražd. Mezi nÄ› patřà krvavé pÅ™epadenà v kavárnÄ› Nite Owl a podivná smrt tajemné krásky Susan Leffersové. Jako by mezi nimi existovala nÄ›jaká spojitost. Policisté ovÅ¡em nejsou jenom "hodnà beránkové", obÄas jako jinà lidé nedodržujà pÅ™ÃsnÄ› stanovená pravidla svého povolánÃ. Snad proto je pÅ™i Å™eÅ¡enà pÅ™Ãpadů tak těžké rozeznat zlo od dobra a nalézt jejich koneÄné Å™eÅ¡enÃ... Retro ladÄ›ný thriller, situovaný do padesátých let, natoÄil režisér Curtis Hanson (Okno z ložnice, Ruka na kolébce, Tichý spoleÄnÃk). SpoleÄnÄ› se scenáristou Brianem Helgelandem obdržel Oscara za zajÃmavé zachycenà dobové atmosféry již ve scénáři. Film je po právu srovnáván s "chandlerovskou" ÄŒÃnskou ÄtvrtÃ. V důmyslnÄ› propracovaném pÅ™ÃbÄ›hu nalezneme úryvky z filmů Revolver k pronajmutÃ, Prázdniny v ŘÃmÄ›. Postavu osudové ženy pÅ™edstavuje Kim Basingerová (PÅ™irozený talent, 9 a 1/2 týdne, Batman, Krásná mimozemÅ¡Å¥anka), která za svoji hereckou kreaci zÃskala Oscara. LežernÃho detektiva Jacka Vincennese hraje Kevin Spacey (SmrtÃcà epidemie, Albino Alligator, Americká krása). Jeho policejnà kolegy Buda Whitea a Eda Exleye ztÄ›lesňujà herci Russell Crowe (známý ze seriálu Záchranáři a filmu RychlejÅ¡Ã než smrt) a Guy Pearce (Dobrodružstvà Priscilly, královny pouÅ¡tÄ›, Flynn). Roli revolverového reportéra hraje Danny DeVito. + + + (ÄŒeská televize)', NULL, 138, '138a6ec7-6a38-4fca-997e-66bfebfec317', 1997), +('0316152d-fa77-42b0-a6d6-5bfa48894674', '2022-06-17 03:33:17.668', '2022-06-17 03:33:17.669', NULL, 'MÄ›sto bohů', 'MÄ›sto bohů', 'Cidade de Deus je nejstarÅ¡Ã a nejnebezpeÄnÄ›jÅ¡Ã slum Ria de Janeira, nejbolavÄ›jÅ¡Ã mÃsto metropole karnevalů. Buscapé se zde narodil, aby žil, mÃsto toho je vÅ¡ak zavleÄen do svÄ›ta, v nÄ›mž se jeho nejlepÅ¡Ã kamarádi mÃsto s hraÄkami bavà s nabitými pistolemi. Snažà se zoufale zůstat stranou dÄ›sivého násilÃ, které zachvacuje jeho přátele a mÄ›nà je v mladistvé zloÄince zabÃjejÃcà se navzájem kvůli obchodu s kokainem, z nenávisti i z pouhého rozmaru. PÅ™ed Buscapéovýma oÄima se chudá ÄtvrÅ¥ v průbÄ›hu třà dekád - od 60. do 80. let - proměňuje v dýmajÃcà bojiÅ¡tÄ›, na kterém si ozbrojené gangy s Å¡okujÃcà lhostejnostà vyÅ™izujà své úÄty za bÃlého dne. Buscapé vidà umÃrat nevinné i ty, které obdivoval a miloval. Jedinou jistotu ve svÄ›tÄ› každodennÃho krvavého násilà pro nÄ›j zaÄne pÅ™edstavovat fotoaparát, kterým zaÄÃná dokumentovat mÄ›stskou džungli kolem sebe. ZaÄÃná chápat, že pÅ™ežÃt může jen útÄ›kem do normálnÃho svÄ›ta - za hranice Ätvrti, kterou má rád jako svůj domov, ale kterou nenávidà jako hrob nevinnosti, nadÄ›je a lásky.Fernando Meirelles debutuje strhujÃcÃm dramatem inspirovaným skuteÄnými osudy. VyprávÄ›nà o dospÃvánà ve stÃnu smrti pÅ™ipomÃná formálnà brilancà filmy Quentina Tarantina Äi Martina Scorseseho. Syrovou autenticitu zvyÅ¡uje obsazenà neherců a skuteÄných obyvatel slumu do Å™ady hlavnÃch rolÃ. SnÃmek si zÃskal mezinárodnà uznánà vÄetnÄ› devÃti ocenÄ›nà na MFF v HavanÄ› a ceny Vision Award na MFF v Torontu. Byl úspěšnÄ› uveden na Å™adÄ› mezinárodnÃch festivalů. ZÃskal nominaci na Zlatý glóbus jako nejlepÅ¡Ã zahraniÄnà film roku a jeho režisér byl ocenÄ›n nominacà na Evropskou filmovou cenu Felix. + + + (oficiálnà text distributora)', NULL, 130, '84fb6602-de41-4b76-9c1a-581ebac234df', 2002), +('5c2f0514-275a-4cd6-8a89-ee32800a86a7', '2022-06-17 03:33:28.722', '2022-06-17 03:33:28.723', NULL, 'Návrat do budoucnosti', 'Návrat do budoucnosti', 'Marty McFly by byl obyÄejný stÅ™edoÅ¡kolák žijÃcà v mÄ›steÄku Hill Valley, kdyby se nepřátelil s ponÄ›kud potrhlým, ale geniálnÃm vÄ›dcem doktorem Emmettem Brownem. Jedné noci mu doktor pÅ™edvede svůj nejvÄ›tÅ¡Ã vynález - stroj Äasu zabudovaný do sportovnÃho vozu DeLorean. Jenže noc se ponÄ›kud nevydařà a doktor je zastÅ™elen teroristy, kterým ukradl plutonium. Marty ve strachu o svůj život nasedne do auta a v rychlosti 88 mil v hodinÄ› se pÅ™enese z roku 1985 do roku 1955. ZpoÄátku si neuvÄ›domuje, kde je, ale postupnÄ› mu to docházÃ. Auto potÅ™ebuje dávku plutonia, ale ta v roce 1955 nenà k sehnánà a tak se Marty obrátà s prosbou o pomoc na doktora Browna z roku 1955. A aby toho nebylo málo, Marty pÅ™ekazà prvnà setkánà svých rodiÄů a hrozÃ, že se tedy do sebe nezamilujà a Marty se nikdy nenarodÃ. Marty bude mÃt hodnÄ› práce, než se mu podařà dát dohromady své rodiÄe a vrátit se do budoucnosti! + + + (Bontonfilm)', NULL, 111, '479fafd8-4266-4761-8ec1-d3c10007b2d4', 1985), +('3f4afd2d-d7f8-4ee1-8038-ae0ae6b5fbf1', '2022-06-17 03:33:43.95', '2022-06-17 03:33:43.951', NULL, 'Pán prstenů: DvÄ› věže', 'Pán prstenů: DvÄ› věže', 'Po smrti Boromira a rozpadu SpoleÄenstva se cesty jeho Älenů rozdÄ›lily. Hobbit Frodo se svým sluhou Samem putujà k HoÅ™e Osudu, jen tam mohou sprovodit ze svÄ›ta obávaný Prsten moci. Musà se vÅ¡ak vypořádat se skÅ™etem Glumem, který se snažà Prsten ukrást, ale hobiti ho pÅ™emůžou, spoutajà a donutà ho, aby je vedl k bránÄ› Mordoru. Aragorn s elfem Legolasem a trpaslÃkem Gimlim se vydávajà po stopÄ› skÅ™etů, aby osvobodili z jejich zajetà hobbity SmÃÅ¡ka a Pippina. MezitÃm vÅ¡ak sÃlà moc temného pána Saurona, který se spojil se zrádným ÄarodÄ›jem Sarumanem a spoleÄnÄ› upÃnajà vÅ¡echny sÃly k zÃskánà Prstenu. Kdyby ho znovu zÃskali, pak by byla StÅ™edozem definitivnÄ› odsouzena k zániku. NaÅ¡e hrdiny tak Äeká jeÅ¡tÄ› dlouhé putovánà a mnohé nástrahy, než se jim podařà Prsten moci jednou provždy zniÄit. + + + (TV Nova)', NULL, 172, '8c4dd6b4-6149-49f4-895a-556561ebc0de', 2002), +('1006d567-9ccc-43c4-a331-55c01b9be869', '2022-06-17 03:33:59.269', '2022-06-17 03:33:59.269', NULL, 'PoÄátek', 'PoÄátek', 'Dom Cobb (Leonardo DiCaprio) je velmi zkuÅ¡ený zlodÄ›j a jeho nejvÄ›tÅ¡Ã mistrovstvà je v krádeži nejcennÄ›jÅ¡Ãch tajemstvÃ. OvÅ¡em nenà to jen tak obyÄejný zlodÄ›j. Dom krade myÅ¡lenky z lidského podvÄ›domà v dobÄ›, kdy lidská mysl je nejzranitelnÄ›jšà – když ÄlovÄ›k spÃ. Cobbova nevÅ¡ednà dovednost z nÄ›j dÄ›lá nejen velmi vyhledávaného experta, ale také ohroženého uprchlÃka. Musel obÄ›tovat vÅ¡e, co kdy miloval. Nynà se mu vÅ¡ak nabÃzà šance na vykoupenÃ. Může zÃskat zpÄ›t svůj život. Tato poslednà zakázka je nejen velmi riskantnÃ, ale zdá se, že i nemožná. Tentokrát nemá za úkol myÅ¡lenku ukrást, ale naopak ji zasadit do nÄ›Äà mysli. Pokud uspÄ›je, bude to dokonalý zloÄin. + + + (Cinemax)', NULL, 148, 'c108844d-b56f-4017-b87e-a085fa52ab8d', 2010), +('7bea4aac-ad0f-4348-8772-abad140fa21f', '2022-06-17 03:34:22.398', '2022-06-17 03:34:22.399', NULL, 'ÄŒistá duÅ¡e', 'ÄŒistá duÅ¡e', 'John Forbes Nash, Jr. (Russell Crowe) zažil vÅ¡e - od výšin slávy až po hlubiny zvrácenosti. Matematický génius uÄinil na zaÄátku své kariéry pÅ™ekvapivý objev a byl jen krůÄek od celosvÄ›tového úspÄ›chu. Ale pohledný a arogantnà Nash se brzy ocitne na bolestivé a trnité cestÄ› sebepoznánÃ. Po mnoha letech boje nakonec zvÃtÄ›zà nad svou tragédià a – na sklonku života – zÃská Nobelovu cenu. Film režiséra Rona Howarda byl ocenÄ›n ÄtyÅ™mi Oscary, vÄetnÄ› tÄ›ch za nejlepÅ¡Ã film a nejlepÅ¡Ã režii. + + + (Cinemax)', NULL, 135, '0c4cb1ea-94e7-4f80-9693-ae8d918eca73', 2001), +('96707a94-a773-45de-b6eb-329c0e5e7289', '2022-06-17 03:34:35.267', '2022-06-17 03:34:35.267', NULL, 'SpalovaÄ mrtvol', 'SpalovaÄ mrtvol', 'Film SpalovaÄ mrtvol natoÄil režisér Juraj Herz podle stejnojmenné novely Ladislava Fukse. Jeho hrdina - zamÄ›stnanec krematoria, je ÄlovÄ›k nenormálnÃ, zatÞený svým povolánÃm, psychopat a maniak, posedlý pÅ™edstavou ÄlovÄ›ka jako mrtvoly a jejà pÅ™emÄ›ny v prach a popel. ÄŒlovÄ›k takto duÅ¡evnÄ› naruÅ¡ený se dá pak snadno svést zrůdnou faÅ¡istickou ideologià k tÄ›m nejstraÅ¡nÄ›jÅ¡Ãm Äinům: zradÄ› národa, ke kterému se dosud hlásil, udavaÄstvÃ, vraždám a spolupráci na masovém vyhlazovánà lidÃ. + + + (Bontonfilm)', NULL, 96, '6ba690c6-39a6-4eec-8e1b-5067fe5492ae', 1968), +('9faa356c-dbd4-48ea-9983-43fca5cd5919', '2022-06-17 03:35:00.732', '2022-06-17 03:35:00.732', NULL, 'Tanec s vlky', 'Tanec s vlky', 'PoruÄÃk Dunbar, těžce zranÄ›ný v bitvÄ› s konfederaÄnà armádou, je dekorován jako hrdina a poslán na vlastnà žádost do opuÅ¡tÄ›né pevnosti na západnà hranici. Spřátelà se s osamÄ›lým vlkem a pokouÅ¡Ã se navázat kontakt s poblÞ žijÃcÃm kmenem Siouxů. PÅ™Ãzeň obezÅ™etných indiánů si zÃská informacà o blÞÃcÃm se stádu bizonů. Jazykové problémy mu pomáhá pÅ™ekonat ovdovÄ›lá ZaÅ¥atá pÄ›st, kterou jako dÃtÄ› bÃlých osadnÃků Indiáni unesli. Dunbar, pÅ™ejmenovaný Siouxi TanÄà s vlky, zaÄne žÃt v indiánské osadÄ›. LÃbà se mu jejich způsob života, v nÄ›mž nacházà smysl dalÅ¡Ã existence. Když se chystá jeho svatba se ZaÅ¥atou pÄ›stÃ, je Dunbar zajat oddÃlem kavalerie, který s nÃm zacházà jako se zrádcem. Siouxové ho osvobodà a zabijà vÄ›tÅ¡inu vojáků, ale Dunbar radÄ›ji se ZaÅ¥atou pÄ›stà kmen opouÅ¡tÃ, aby nepÅ™ivolal pomstu kavaleristů. + + + (oficiálnà text distributora)', NULL, 181, 'bd48f395-6de7-492c-a0a5-113a79e394c9', 1990), +('540b25e9-dae9-401e-bba4-4f2b3605e770', '2022-06-17 03:35:16.106', '2022-06-17 03:35:16.107', NULL, 'Gladiátor', 'Gladiátor', 'PÅ™ÃbÄ›h Å™Ãmského generála Maxima zaÄÃná v zimÄ› roku 180, kdy v Äele Å™Ãmských legià zvÃtÄ›zil nad germánskými kmeny. Po bitvÄ› dorazà do leženà cÃsaÅ™ Marcus Aurelius se svými dÄ›tmi, slaboÅ¡ským synem Commodem a dcerou Lucillou, která byla kdysi Maximovou milenkou. VÄ›Änými boji unavený cÃsaÅ™ požádá Maxima, aby se po jeho smrti stal protektorem ŘÃma. Generál to vÅ¡ak odmÃtne. Když se Commodus dozvÃ, že ho otec nehodlá jmenovat svým nástupcem, zákeÅ™nÄ› ho usmrtà a zmocnà se vlády. Maximus se novému vládci odmÃtne podrobit a je zatÄen. Podařà se mu uprchnout a spÄ›chá domů. Svůj dům najde vypálený a manželku i syna zavraždÄ›né. VyÄerpán žalem i zranÄ›nÃm omdlà a probere se v zajetà otrokářské karavany. Je pak prodán bývalému gladiátorovi Proximovi. SpoleÄnÄ› s Äerným otrokem Jubou projde gladiátorským výcvikem a dostane pÅ™ezdÃvku Å panÄ›l. Commodus se vracà do ŘÃma a chce rozpustit senát. K tomu vÅ¡ak potÅ™ebuje zÃskat na svou stranu lid. Rozhodne se proto uspořádat velkolepé gladiátorské hry, kam pÅ™ijÞdà i Proximovi gladiátoÅ™i. + + + (TV Nova)', NULL, 155, '4d6704cb-02bc-4283-a4c2-074dfa1afd9c', 2000); + +DROP TABLE IF EXISTS "_MovieCategory"; +CREATE TABLE "public"."_MovieCategory" ( + "A" text NOT NULL, + "B" text NOT NULL, + CONSTRAINT "_MovieCategory_AB_unique" UNIQUE ("A", "B") +) WITH (oids = false); + +CREATE INDEX "_MovieCategory_B_index" ON "public"."_MovieCategory" USING btree ("B"); + +INSERT INTO "_MovieCategory" ("A", "B") VALUES +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'bf9d8581-6f71-40ed-b048-1d4612252347'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'bf9d8581-6f71-40ed-b048-1d4612252347'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '5a075dfc-afdd-49a7-9c19-052c41bc7f5f'), +('0194145a-cc12-4334-8637-b2222460a944', '5a075dfc-afdd-49a7-9c19-052c41bc7f5f'), +('f1c079ca-e421-4f5f-b6b9-a8ee774e4e98', '5a075dfc-afdd-49a7-9c19-052c41bc7f5f'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'e153953b-d6d4-46d3-a686-cbee3a9ce826'), +('9149e3dd-de80-453e-8361-3ed1472404b5', 'e153953b-d6d4-46d3-a686-cbee3a9ce826'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'e153953b-d6d4-46d3-a686-cbee3a9ce826'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '91abd554-90cb-42b2-946d-fb9bf82540de'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '91abd554-90cb-42b2-946d-fb9bf82540de'), +('9149e3dd-de80-453e-8361-3ed1472404b5', '91abd554-90cb-42b2-946d-fb9bf82540de'), +('a8252bc5-e8c9-42a8-9196-d340acd836f9', '91abd554-90cb-42b2-946d-fb9bf82540de'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '91abd554-90cb-42b2-946d-fb9bf82540de'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'a5ff76f6-3e98-4f01-a483-1eeaa1bc2251'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'f30a8732-a3bd-4da9-b99f-9e741776d937'), +('b1bda101-4b2b-48db-a4d0-bf26770aa21e', 'f30a8732-a3bd-4da9-b99f-9e741776d937'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', 'f30a8732-a3bd-4da9-b99f-9e741776d937'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'd6f9f4a2-2e3e-44af-bfe4-24fbd3d9f1da'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'd6f9f4a2-2e3e-44af-bfe4-24fbd3d9f1da'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'b8a0e8d1-6008-45f2-b487-833e628e8556'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'b8a0e8d1-6008-45f2-b487-833e628e8556'), +('0194145a-cc12-4334-8637-b2222460a944', 'f7735ebd-e246-40bb-8ddf-b30b2ccc3445'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'f7735ebd-e246-40bb-8ddf-b30b2ccc3445'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', 'f7735ebd-e246-40bb-8ddf-b30b2ccc3445'), +('0194145a-cc12-4334-8637-b2222460a944', 'de359ca8-3d88-4315-8525-0bb873240035'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'de359ca8-3d88-4315-8525-0bb873240035'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'dcc82e4a-16d6-4223-9898-3a0e77a48195'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', 'dcc82e4a-16d6-4223-9898-3a0e77a48195'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', 'dcc82e4a-16d6-4223-9898-3a0e77a48195'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'ba8d9bb7-4f01-40bd-a893-4e56b1025738'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'ba8d9bb7-4f01-40bd-a893-4e56b1025738'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'ae2b5576-8a70-4c7e-ac1d-b698067dce4a'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'ae2b5576-8a70-4c7e-ac1d-b698067dce4a'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '12d7e4ca-f382-4356-bf9f-c1bd742ba7c7'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '12d7e4ca-f382-4356-bf9f-c1bd742ba7c7'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', '6557d3e6-e655-428d-b491-bf4c4fad3839'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '6557d3e6-e655-428d-b491-bf4c4fad3839'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '6557d3e6-e655-428d-b491-bf4c4fad3839'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', 'bf9cbba5-5fa9-49f1-96ae-dad75cbfb34e'), +('b5a35b28-a5be-420c-9760-e2a577c31391', 'bf9cbba5-5fa9-49f1-96ae-dad75cbfb34e'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'bf9cbba5-5fa9-49f1-96ae-dad75cbfb34e'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '6c6f86f2-8146-44c9-8085-da7ff19d7428'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '6c6f86f2-8146-44c9-8085-da7ff19d7428'), +('9d4201d6-8690-4b88-99a4-81670db1cabd', '6c6f86f2-8146-44c9-8085-da7ff19d7428'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '6c6f86f2-8146-44c9-8085-da7ff19d7428'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', '685b5c6f-cca3-4a21-af49-bce5bb8e979c'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '685b5c6f-cca3-4a21-af49-bce5bb8e979c'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'ad0b4239-6258-46a7-9ab7-ccbcdac29d2c'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'ad0b4239-6258-46a7-9ab7-ccbcdac29d2c'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'ad0b4239-6258-46a7-9ab7-ccbcdac29d2c'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', 'ad0b4239-6258-46a7-9ab7-ccbcdac29d2c'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '50a76f76-4bb5-4eb1-9262-999f4c606e23'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '644026a2-28b7-4c13-bd23-7a0e85addcae'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '644026a2-28b7-4c13-bd23-7a0e85addcae'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', 'ef87c8b4-ef23-49f8-ae66-7ee19d072394'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '07c5648d-d5cb-4e17-9833-8c5487caabd0'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '07c5648d-d5cb-4e17-9833-8c5487caabd0'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '845f7ea6-82ef-4940-8bcc-c5ac2bd611f4'), +('7ab10e30-f4f1-490e-8694-41bb888d7e00', '845f7ea6-82ef-4940-8bcc-c5ac2bd611f4'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', 'bd914599-0e2c-4eb8-a516-1355780f512c'), +('b5a35b28-a5be-420c-9760-e2a577c31391', 'bd914599-0e2c-4eb8-a516-1355780f512c'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'bd914599-0e2c-4eb8-a516-1355780f512c'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '1255f864-0d0b-487f-b2b7-998a5a895cdd'), +('eea14b3e-dea7-4dd2-b99e-7cedc7063471', '1255f864-0d0b-487f-b2b7-998a5a895cdd'), +('b5a35b28-a5be-420c-9760-e2a577c31391', 'ad68fefc-dafa-41d5-b45a-2e13e3866c06'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'ad68fefc-dafa-41d5-b45a-2e13e3866c06'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', 'ad68fefc-dafa-41d5-b45a-2e13e3866c06'), +('9d4201d6-8690-4b88-99a4-81670db1cabd', '5d6dacb2-63c4-45fc-b0f4-e24580b3c846'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '5d6dacb2-63c4-45fc-b0f4-e24580b3c846'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'd5839e47-ad9c-4e22-b30f-bcd8bb7138f6'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', 'd5839e47-ad9c-4e22-b30f-bcd8bb7138f6'), +('1b524176-5fbd-4ac9-bda2-36030d9e9b15', 'd5839e47-ad9c-4e22-b30f-bcd8bb7138f6'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'd5839e47-ad9c-4e22-b30f-bcd8bb7138f6'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '59dca9d0-288b-4155-9af3-cae4e763f54a'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', '59dca9d0-288b-4155-9af3-cae4e763f54a'), +('1b524176-5fbd-4ac9-bda2-36030d9e9b15', '59dca9d0-288b-4155-9af3-cae4e763f54a'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '59dca9d0-288b-4155-9af3-cae4e763f54a'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '76b033f4-9a8a-4c54-9f85-3b63c7b62b35'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '76b033f4-9a8a-4c54-9f85-3b63c7b62b35'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', 'de0a75c1-e45a-4bae-8550-bc9fcccafb07'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', 'de0a75c1-e45a-4bae-8550-bc9fcccafb07'), +('6c598737-616e-4caa-bd4a-26686b5ca731', 'de0a75c1-e45a-4bae-8550-bc9fcccafb07'), +('b5a35b28-a5be-420c-9760-e2a577c31391', 'de0a75c1-e45a-4bae-8550-bc9fcccafb07'), +('9d4201d6-8690-4b88-99a4-81670db1cabd', 'de0a75c1-e45a-4bae-8550-bc9fcccafb07'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '4fa020fd-978c-4e18-a697-d28a13a63573'), +('0194145a-cc12-4334-8637-b2222460a944', '4fa020fd-978c-4e18-a697-d28a13a63573'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '4fa020fd-978c-4e18-a697-d28a13a63573'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'f9e0e24c-4392-4050-b89e-6e01aef459d8'), +('eea14b3e-dea7-4dd2-b99e-7cedc7063471', 'f9e0e24c-4392-4050-b89e-6e01aef459d8'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', 'c272df44-94b4-4fb5-8ee2-d09432e38176'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', 'c272df44-94b4-4fb5-8ee2-d09432e38176'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', 'c272df44-94b4-4fb5-8ee2-d09432e38176'), +('80869462-7c34-4795-b6d9-0c87dc0a3f3c', '96c5ff43-25d1-4758-aafb-27c231d4e958'), +('0194145a-cc12-4334-8637-b2222460a944', '96c5ff43-25d1-4758-aafb-27c231d4e958'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '85263627-30a9-4fbc-b077-7d10208a3e61'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', '85263627-30a9-4fbc-b077-7d10208a3e61'), +('695bcf99-8de9-4992-b9e6-04e8ef8d2d66', '85263627-30a9-4fbc-b077-7d10208a3e61'), +('0194145a-cc12-4334-8637-b2222460a944', '10573777-d494-4484-86a5-3220f051b9ae'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '10573777-d494-4484-86a5-3220f051b9ae'), +('0194145a-cc12-4334-8637-b2222460a944', '3898e012-8471-485c-9e44-cf876e7f0a6f'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '5a09c1dd-145b-4a5c-a412-849ef3b656ee'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '5a09c1dd-145b-4a5c-a412-849ef3b656ee'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', '5a09c1dd-145b-4a5c-a412-849ef3b656ee'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '5a09c1dd-145b-4a5c-a412-849ef3b656ee'), +('0194145a-cc12-4334-8637-b2222460a944', '148924fd-8d00-4ab8-bfce-4593f1c53d54'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '5fb0df28-1b13-4002-8f45-a1dc9d63d1f3'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '5fb0df28-1b13-4002-8f45-a1dc9d63d1f3'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', '5fb0df28-1b13-4002-8f45-a1dc9d63d1f3'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', '5fb0df28-1b13-4002-8f45-a1dc9d63d1f3'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '275dfe53-0deb-46b4-8c6c-44dbda0cd69d'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '275dfe53-0deb-46b4-8c6c-44dbda0cd69d'), +('9149e3dd-de80-453e-8361-3ed1472404b5', '275dfe53-0deb-46b4-8c6c-44dbda0cd69d'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '275dfe53-0deb-46b4-8c6c-44dbda0cd69d'), +('6c018d1e-df59-45ee-a74f-24b24201f4fb', '0316152d-fa77-42b0-a6d6-5bfa48894674'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '0316152d-fa77-42b0-a6d6-5bfa48894674'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '5c2f0514-275a-4cd6-8a89-ee32800a86a7'), +('0194145a-cc12-4334-8637-b2222460a944', '5c2f0514-275a-4cd6-8a89-ee32800a86a7'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '5c2f0514-275a-4cd6-8a89-ee32800a86a7'), +('b0815bb7-6efc-4a17-bb06-32690b05943e', '3f4afd2d-d7f8-4ee1-8038-ae0ae6b5fbf1'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '3f4afd2d-d7f8-4ee1-8038-ae0ae6b5fbf1'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '3f4afd2d-d7f8-4ee1-8038-ae0ae6b5fbf1'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '1006d567-9ccc-43c4-a331-55c01b9be869'), +('3b3fbec3-ae21-4683-bb6b-c7a7a289e2d6', '1006d567-9ccc-43c4-a331-55c01b9be869'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '1006d567-9ccc-43c4-a331-55c01b9be869'), +('9149e3dd-de80-453e-8361-3ed1472404b5', '1006d567-9ccc-43c4-a331-55c01b9be869'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '1006d567-9ccc-43c4-a331-55c01b9be869'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '7bea4aac-ad0f-4348-8772-abad140fa21f'), +('1b012da6-a926-4b9f-a432-dca6cd1111ec', '7bea4aac-ad0f-4348-8772-abad140fa21f'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '96707a94-a773-45de-b6eb-329c0e5e7289'), +('9d4201d6-8690-4b88-99a4-81670db1cabd', '96707a94-a773-45de-b6eb-329c0e5e7289'), +('76128e4c-f28b-4647-9061-5fe85329f5f8', '96707a94-a773-45de-b6eb-329c0e5e7289'), +('a8252bc5-e8c9-42a8-9196-d340acd836f9', '96707a94-a773-45de-b6eb-329c0e5e7289'), +('0194145a-cc12-4334-8637-b2222460a944', '96707a94-a773-45de-b6eb-329c0e5e7289'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '9faa356c-dbd4-48ea-9983-43fca5cd5919'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '9faa356c-dbd4-48ea-9983-43fca5cd5919'), +('01771e30-20cf-4117-b8b9-c73d323b5a50', '9faa356c-dbd4-48ea-9983-43fca5cd5919'), +('6c598737-616e-4caa-bd4a-26686b5ca731', '540b25e9-dae9-401e-bba4-4f2b3605e770'), +('b5a35b28-a5be-420c-9760-e2a577c31391', '540b25e9-dae9-401e-bba4-4f2b3605e770'), +('de468ee1-4be5-4ee6-8ef2-a26d4079596e', '540b25e9-dae9-401e-bba4-4f2b3605e770'); + +DROP TABLE IF EXISTS "_prisma_migrations"; +CREATE TABLE "public"."_prisma_migrations" ( + "id" character varying(36) NOT NULL, + "checksum" character varying(64) NOT NULL, + "finished_at" timestamptz, + "migration_name" character varying(255) NOT NULL, + "logs" text, + "rolled_back_at" timestamptz, + "started_at" timestamptz DEFAULT now() NOT NULL, + "applied_steps_count" integer DEFAULT '0' NOT NULL, + CONSTRAINT "_prisma_migrations_pkey" PRIMARY KEY ("id") +) WITH (oids = false); + +INSERT INTO "_prisma_migrations" ("id", "checksum", "finished_at", "migration_name", "logs", "rolled_back_at", "started_at", "applied_steps_count") VALUES +('ddf57fc5-f76e-4c7c-8a22-bc1a35d7e8a1', 'fa4057a9072e083656ea0997cd3084d0581ae0cd2a7331dac9bffe6e42d8d40a', '2022-06-17 03:22:17.267113+00', '20220614193457_init', NULL, NULL, '2022-06-17 03:22:17.173499+00', 1), +('6ac4f92f-d6a5-4cf8-a5d4-dcb237538c32', '1620d1dea3776aa47df54c1c1bfb3c26b9227a6245d9cd8d575e2f92105cfd57', '2022-06-17 03:22:17.283629+00', '20220617021322_init', NULL, NULL, '2022-06-17 03:22:17.270648+00', 1); + +ALTER TABLE ONLY "public"."Movie" ADD CONSTRAINT "Movie_directorId_fkey" FOREIGN KEY ("directorId") REFERENCES "Director"(id) ON UPDATE CASCADE ON DELETE RESTRICT NOT DEFERRABLE; + +ALTER TABLE ONLY "public"."_MovieCategory" ADD CONSTRAINT "_MovieCategory_A_fkey" FOREIGN KEY ("A") REFERENCES "Category"(id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE; +ALTER TABLE ONLY "public"."_MovieCategory" ADD CONSTRAINT "_MovieCategory_B_fkey" FOREIGN KEY ("B") REFERENCES "Movie"(id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE; + +-- 2022-06-17 03:38:30.677516+00