Adding create album action
All checks were successful
Music Collection CI Workflow / test (./backend) (push) Successful in 22s
Music Collection CI Workflow / test (./frontend) (push) Successful in 19s
Music Collection CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/msuic-collection-backend, ./backend) (push) Successful in 48s
Music Collection CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/music-collection-frontend, ./frontend) (push) Successful in 1m18s
Music Collection CI Workflow / deploy (push) Successful in 21s

This commit is contained in:
Phill Pover 2025-04-03 12:36:34 +01:00
parent 1e4f2875aa
commit fbe5d54e81
4 changed files with 58 additions and 11 deletions

View File

@ -0,0 +1,24 @@
'use server'
export async function createAlbum(formData: FormData) {
const title = formData.get('title');
const artist = formData.get('artist');
const genre = formData.get('genre');
await fetch("https://api.anatid.net/album", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
title: title,
artist: artist,
genre: genre,
}),
});
}
//
// export async function updateAlbum(formData: FormData) {
//
// }
//
// export async function deleteAlbum(formData: FormData) {
//
// }

View File

@ -3,6 +3,7 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import Link from 'next/link'; import Link from 'next/link';
import { Album } from '@/entities/album.entity'; import { Album } from '@/entities/album.entity';
import { CreateAlbumButton } from '@/app/ui/button';
export default function Page() { export default function Page() {
const [albums, setAlbums] = useState<Album[]>([]); const [albums, setAlbums] = useState<Album[]>([]);
@ -19,6 +20,7 @@ export default function Page() {
if (!albums) return <div>Loading...</div> if (!albums) return <div>Loading...</div>
return ( return (
<div>
<ul> <ul>
{albums.map((album: Album) => ( {albums.map((album: Album) => (
<li key={album.id}> <li key={album.id}>
@ -30,5 +32,7 @@ export default function Page() {
</Link> by {album.artist} ({album.genre})</li> </Link> by {album.artist} ({album.genre})</li>
))} ))}
</ul> </ul>
{CreateAlbumButton()}
</div>
); );
} }

View File

@ -0,0 +1,7 @@
'use client'
import { createAlbum } from '@/app/actions'
export function CreateAlbumButton() {
return <button formAction={createAlbum}>Create</button>
}

View File

@ -0,0 +1,12 @@
import { createAlbum } from '@/app/actions'
export function CreateAlbumForm() {
return (
<form action={createAlbum}>
<input type="text" name="title" />
<input type="text" name="artist" />
<input type="text" name="genre" />
<button type="submit">Create</button>
</form>
)
}