Skip to content

Commit

Permalink
Add staff to the movie.
Browse files Browse the repository at this point in the history
  • Loading branch information
pavlo-bystrytskyi committed Oct 25, 2024
1 parent 66c0c48 commit 9fc7aff
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 5 deletions.
18 changes: 17 additions & 1 deletion frontend/src/Component/App/Details.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,26 @@ export default function Details(
() => console.log(errorMessage)
)
}
const updateActorData = function () {
axios.get<PersonType[]>("/api/movie-actor/" + id).then(
(result) => setActorsData(result.data)
).catch(
() => console.log(errorMessage)
)
}
const updateDirectorData = function () {
axios.get<PersonType[]>("/api/movie-director/" + id).then(
(result) => setDirectorsData(result.data)
).catch(
() => console.log(errorMessage)
)
}


useEffect(updateMovieData, [id]);
useEffect(updateRatingData, [id]);
useEffect(updateActorData, [id]);
useEffect(updateDirectorData, [id]);

if (!userName) {
return;
Expand All @@ -63,7 +79,7 @@ export default function Details(
setDirectorsData={setDirectorsData}/> :
<MovieDetails id={id ?? ""}/>}
<MovieControls editModeEnabled={editModeEnabled} setEditModeEnabled={setEditModeEnabled}
ratingData={ratingData} movieData={movieData}/>
ratingData={ratingData} movieData={movieData} actorData={actorsData} directorData={directorsData}/>
</div>
);
}
55 changes: 51 additions & 4 deletions frontend/src/Component/App/Details/MovieControls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ import {useNavigate, useParams} from "react-router-dom";
import {useState} from "react";
import RatingType from "../../../Type/RatingType.tsx";
import MovieType from "../../../Type/MovieType.tsx";
import PersonType from "../../../Type/PersonType.tsx";
import personType from "../../../Type/PersonType.tsx";

export default function MovieControls(
{editModeEnabled, setEditModeEnabled, ratingData, movieData}:
{editModeEnabled, setEditModeEnabled, ratingData, movieData, actorData, directorData}:
{
editModeEnabled: boolean, setEditModeEnabled: (state: boolean) => void,
ratingData: RatingType, movieData: MovieType
ratingData: RatingType, movieData: MovieType, actorData: PersonType[],
directorData: personType[]
}) {

const [saveButtonDisabled, setSaveButtonDisabled] = useState<boolean>(false);
Expand All @@ -22,10 +25,54 @@ export default function MovieControls(
const save = async () => {
setSaveButtonDisabled(true);
try {
await axios.put(`/api/movie/${id}`, movieData);
const actors = actorData.map(
async (actor) => {
if (!actor.id) {
const response = await axios.post<PersonType>(`/api/actor`, actor);
actor.id = response.data.id;
}

return actor;
}
);

const directors= directorData.map(
async (director) => {
if (!director.id) {
const response = await axios.post<PersonType>(`/api/director`, director);
director.id = response.data.id;
}

return director;
}
);

const movieResponse = await axios.put(`/api/movie/${id}`, movieData);
await axios.post(`/api/rating`, ratingData);
} catch {
for (const actor of actors) {
const actorInstance = await actor;
if (actorInstance.id) {
const data = {
movieId: movieResponse.data.id,
actorId: actorInstance.id
}
await axios.post<PersonType>(`/api/movie-actor`, data);
}
}

for (const director of directors) {
const directorInstance = await director;
if (directorInstance.id) {
const data = {
movieId: movieResponse.data.id,
directorId: directorInstance.id
}
await axios.post<PersonType>(`/api/movie-director`, data);
}
}
} catch (exception) {
alert("Something went wrong");
console.log(exception);
} finally {
setEditModeEnabled(false);
setSaveButtonDisabled(false);
Expand Down

0 comments on commit 9fc7aff

Please sign in to comment.