瀏覽代碼

FEAT: get & show movie details datas

master
valere 5 月之前
父節點
當前提交
00d8af722f
共有 3 個檔案被更改,包括 31 行新增24 行删除
  1. +1
    -18
      README.md
  2. +20
    -4
      pages/details/[id].vue
  3. +10
    -2
      server/api/details/[id].ts

+ 1
- 18
README.md 查看文件

@@ -1,21 +1,4 @@
Test technique
Ce test a pour vocation à évaluer les compétences techniques et le savoir-faire sur la
technologie. La qualité du test sera l’aspect le plus important dans ce rendu. Toute prise
d’initiative supplémentaire sera évidemment prise en compte. En cas de doute sur certains
points de ce test, ne pas hésiter à nous contacter à it@hellocse.fr.
À l’aide de VueJS 3 vous allez devoir réaliser un interface de films de cinéma en utilisant
l’API TMDB : https://developer.themoviedb.org/reference/intro/getting-started. Vous devrez
réaliser 3 pages :
- Liste des films
- Ajouter un défilement infini
- Ajouter un filtre de recherche sur le nom du film
(https://developer.themoviedb.org/reference/search-movie)
- Lorsque l’on clique sur un film, on souhaite voir le détail des informations de
ce film.
- Détail d’un film avec les informations relatives à ce film
(https://developer.themoviedb.org/reference/movie-details)
- Les données du film à afficher sur cette pages sont :
- L’affiche, le titre, le synopsis, le réalisateur, les stars / têtes d’affiche,
les stars / têtes d’affiche,
les catégories, la note TMDB et le nombre de personnes ayant noté le les catégories, la note TMDB et le nombre de personnes ayant noté le
film. film.
- En dessous des informations du film, on souhaite pouvoir laisser des - En dessous des informations du film, on souhaite pouvoir laisser des


+ 20
- 4
pages/details/[id].vue 查看文件

@@ -1,12 +1,24 @@
<template> <template>
<section> <section>
<img :src="config.public.IMG_BASE_URL + film.poster_path" :alt="film.title"> <img :src="config.public.IMG_BASE_URL + film.poster_path" :alt="film.title">
<span class="flex flex-row">
<span class="">
{{ film.title }} {{ film.title }}
{{ film.original_title }}
{{ film.overview }}
{{ director }}
<ul>
<li v-for="star in film.credits.cast">
{{ star.name }}
</li>
</ul>
<ul>
<li v-for="genre in film.genres">
{{ genre.name }}
</li>
</ul>
<!-- {{ film.vote_count }} -->
<!-- {{ film.release_date }} -->
{{ film.vote_average }}
{{ film.vote_count }} {{ film.vote_count }}
{{ film.release_date }}
{{ film.id }}
</span> </span>
</section> </section>
</template> </template>
@@ -16,10 +28,14 @@ const config = useRuntimeConfig()
const film = ref() const film = ref()
const route = useRoute() const route = useRoute()
const filmId = ref('') const filmId = ref('')
const director = ref('')

filmId.value = route.params.id filmId.value = route.params.id


if (filmId.value !== '') { if (filmId.value !== '') {
const { data } = await useFetch(`/api/details/${filmId.value}`) const { data } = await useFetch(`/api/details/${filmId.value}`)
film.value = data.value film.value = data.value
director.value = film.value.credits.crew.filter((member) => member.job === 'Director')
director.value = director.value[0].name
} }
</script> </script>

+ 10
- 2
server/api/details/[id].ts 查看文件

@@ -2,12 +2,20 @@ import fetch from 'node-fetch'


export default eventHandler(async (req) => { export default eventHandler(async (req) => {
const id = req.context.params?.id || '' const id = req.context.params?.id || ''
const url = `https://api.themoviedb.org/3/movie/${id}`
const url = `https://api.themoviedb.org/3/movie/${id}?language=fr-FR`
const url_credits = `https://api.themoviedb.org/3/movie/${id}/credits?language=fr-FR`
const config = useRuntimeConfig(req) const config = useRuntimeConfig(req)


const response = await fetch(url, { const response = await fetch(url, {
method: 'get', method: 'get',
headers: { 'Content-Type': 'application/json', 'Authorization': config.API_BEARER } headers: { 'Content-Type': 'application/json', 'Authorization': config.API_BEARER }
}) })
return await response.json()
const response_credits = await fetch(url_credits, {
method: 'get',
headers: { 'Content-Type': 'application/json', 'Authorization': config.API_BEARER }
})

let details = await response.json()
details.credits = await response_credits.json()
return details
}) })

Loading…
取消
儲存