diff --git a/software/backend/data/bands.json b/software/backend/data/bands.json index 6ee4ecb..52d5136 100644 --- a/software/backend/data/bands.json +++ b/software/backend/data/bands.json @@ -8,7 +8,7 @@ "descriptionDe": "Red Hot Chili Peppers (Abkürzung: RHCP) ist eine 1983 gegründete US-amerikanische Funk- und Alternative-Rockband. Sie zählt zu den kommerziell erfolgreichsten Vertretern des Crossover. Ihr Album Blood Sugar Sex Magik gilt als eines der bedeutendsten dieses Genres.", "images": [ "red-hot-chili-peppers-1.jpg" ], "logo": "red-hot-chili-peppers-logo.png", - "genreId": 0, + "genreId": [ 0, 2, 3 ], "members": [ { "name": "Anthony Kiedis", @@ -47,7 +47,7 @@ "descriptionDe": "Radiohead ist eine britische Rockband, die 1985 in Oxford, England gegründet wurde. Die Band besteht aus Thom Yorke (Gesang, Rhythmusgitarre, Piano), Jonny Greenwood (Lead-Gitarre, Keyboard, Ondes Martenot), Colin Greenwood (E-Bass, Keyboard), Ed O’Brien (Gitarre, Backgroundvocals) und Phil Selway (Schlagzeug, Backgroundvocals). Radioheads experimenteller Ansatz gilt als Wegbereiter für den Sound des Alternative Rocks.", "images": [ "radiohead-1.jpg" ], "logo": "radiohead-logo.jpg", - "genreId": 1, + "genreId": [ 1, 2, 4, 5, 6 ], "members": [ { "name": "Thom Yorke", @@ -96,7 +96,7 @@ "descriptionDe": "Die Arctic Monkeys sind eine vierköpfige britische Alternative-Rock-Band mit Einflüssen aus Post-Punk und Garage Rock. Sie wurde 2002 im englischen Sheffield gegründet und veröffentlichte 2006 ihr Debütalbum, das Platz eins der britischen Charts erreichte. 2007, 2009, 2011, 2013 und 2018 erschienen jeweils weitere Alben der Musikgruppe, die alle ebenfalls die Spitzenposition in Großbritannien erreichten. Aktuelles Album der Band ist das am 21. Oktober 2022 erschienene The Car.", "images": [ "arctic-monkeys-1.jpg", "arctic-monkeys-2.jpg" ], "logo": "arctic-monkeys-logo.png", - "genreId": 2, + "genreId": [ 2, 7, 8 ], "members": [ { "name": "Glyn Jones", @@ -150,7 +150,7 @@ "descriptionDe": "Coldplay ist eine britische Pop-Rock-Band, bestehend aus Chris Martin, Jonny Buckland, Will Champion und Guy Berryman. Sie ist eine der weltweit erfolgreichsten Bands der 2000er-Jahre und hat knapp 80 Millionen Tonträger weltweit verkauft, davon 50 Millionen Alben.", "images": [ "coldplay-1.jpg" ], "logo": "coldplay-logo.jpg", - "genreId": 2, + "genreId": [ 2, 9 ], "members": [ { "name": "Chris Martin", @@ -174,7 +174,7 @@ }, { "name": "Phil Harvey", - "bandId": 2, + "bandId": 3, "image": "phil-harvey.jpg" } ], @@ -199,7 +199,7 @@ "descriptionDe": "Foo Fighters ist eine US-amerikanische Rockband. Prominentestes Mitglied und Band-Gründer ist der ehemalige Nirvana-Schlagzeuger Dave Grohl. ", "images": [ "foo-fighters-1.jpg" ], "logo": "foo-fighters-logo.png", - "genreId": 2, + "genreId": [ 2, 10 ], "members": [ { "name": "Dave Grohl", diff --git a/software/backend/data/genres.json b/software/backend/data/genres.json index 39d2765..11d86c8 100644 --- a/software/backend/data/genres.json +++ b/software/backend/data/genres.json @@ -2,15 +2,47 @@ "data": [ { "id": 0, - "name": "Funk rock" + "name": "Funk Rock" }, { "id": 1, - "name": "Art rock" + "name": "Art Rock" }, { "id": 2, "name": "Alternative Rock" + }, + { + "id": 3, + "name": "Crossover" + }, + { + "id": 4, + "name": "Electronica" + }, + { + "id": 5, + "name": "Post-Rock" + }, + { + "id": 6, + "name": "Britpop" + }, + { + "id": 7, + "name": "Post-Punk" + }, + { + "id": 8, + "name": "Garage Rock" + }, + { + "id": 9, + "name": "Pop-Rock" + }, + { + "id": 10, + "name": "Post-Grunge" } ] } \ No newline at end of file diff --git a/software/backend/database.ts b/software/backend/database.ts index 86f08c9..5398d8d 100644 --- a/software/backend/database.ts +++ b/software/backend/database.ts @@ -16,6 +16,7 @@ import { Member } from "./models/acts/member.model" import { Rating } from "./models/acts/rating.model" import { Tour } from "./models/acts/tour.model" import { City } from "./models/acts/city.model" +import { BandGenre } from "./models/acts/bandGenre.model" const dbName = "database" const dbUser = "root" @@ -30,7 +31,7 @@ export const sequelize = new Sequelize({ storage: "database.sqlite", models: [ AccountRole, Account, Payment, Address, - City, Location, Genre, Band, Rating, Member, Tour, Show, + City, Location, Genre, Band, BandGenre, Rating, Member, Tour, Show, Order, OrderItem ] }) diff --git a/software/backend/models/acts/band.model.ts b/software/backend/models/acts/band.model.ts index 2885260..a8bb3f9 100644 --- a/software/backend/models/acts/band.model.ts +++ b/software/backend/models/acts/band.model.ts @@ -1,8 +1,9 @@ -import { BelongsTo, Column, DataType, ForeignKey, HasMany, Model, Table } from "sequelize-typescript"; +import { BelongsTo, BelongsToMany, Column, DataType, ForeignKey, HasMany, Model, Table } from "sequelize-typescript"; import { Member } from "./member.model"; import { Genre } from "./genre.model"; import { Rating } from "./rating.model"; import { Tour } from "./tour.model"; +import { BandGenre } from "./bandGenre.model"; @Table({ timestamps: false }) export class Band extends Model { @@ -32,10 +33,6 @@ export class Band extends Model { @Column logo: String - @ForeignKey(() => Genre) - @Column - genreId: Number - // Relations @@ -48,6 +45,6 @@ export class Band extends Model { @HasMany(() => Tour) tours: Tour[] - @BelongsTo(() => Genre) - genre: Genre + @BelongsToMany(() => Genre, () => BandGenre) + genres: Genre[] } \ No newline at end of file diff --git a/software/backend/models/acts/bandGenre.model.ts b/software/backend/models/acts/bandGenre.model.ts new file mode 100644 index 0000000..2908164 --- /dev/null +++ b/software/backend/models/acts/bandGenre.model.ts @@ -0,0 +1,16 @@ +import { AutoIncrement, Column, ForeignKey, Model, PrimaryKey, Table, Unique } from "sequelize-typescript"; +import { Genre } from "./genre.model"; +import { Band } from "./band.model"; + +@Table({ timestamps: false }) +export class BandGenre extends Model { + @PrimaryKey + @Column({autoIncrement: true}) + declare id: number + + @ForeignKey(() => Genre) + genreId: number + + @ForeignKey(() => Band) + bandId: number +} \ No newline at end of file diff --git a/software/backend/models/acts/genre.model.ts b/software/backend/models/acts/genre.model.ts index 3793826..43358bd 100644 --- a/software/backend/models/acts/genre.model.ts +++ b/software/backend/models/acts/genre.model.ts @@ -1,5 +1,6 @@ -import { Column, HasMany, Model, Table } from "sequelize-typescript"; +import { BelongsToMany, Column, Model, Table } from "sequelize-typescript"; import { Band } from "./band.model"; +import { BandGenre } from "./bandGenre.model"; @Table({ timestamps: false }) export class Genre extends Model { @@ -9,6 +10,6 @@ export class Genre extends Model { // Relations - @HasMany(() => Band) + @BelongsToMany(() => Band, () => BandGenre) bands: Band[] } \ No newline at end of file diff --git a/software/backend/routes/genre.routes.ts b/software/backend/routes/genre.routes.ts index 9598575..ef0296d 100644 --- a/software/backend/routes/genre.routes.ts +++ b/software/backend/routes/genre.routes.ts @@ -1,10 +1,19 @@ +import { Rating } from "../models/acts/rating.model"; +import { Band } from "../models/acts/band.model"; import { Genre } from "../models/acts/genre.model"; import { Request, Response, Router } from "express"; export const genre = Router() genre.get("/", (req: Request, res: Response) => { - Genre.findAll() + Genre.findAll({ + include: [ + { + model: Band, + include: [ Rating ] + } + ] + }) .then(genres => { res.status(200).json(genres) }) diff --git a/software/backend/scripts/databaseHelper.ts b/software/backend/scripts/databaseHelper.ts index 4938621..99924f7 100644 --- a/software/backend/scripts/databaseHelper.ts +++ b/software/backend/scripts/databaseHelper.ts @@ -12,6 +12,7 @@ import { Location } from '../models/acts/location.model' import { Show } from '../models/acts/show.model' import { Tour } from '../models/acts/tour.model' import { City } from '../models/acts/city.model' +import { BandGenre } from '../models/acts/bandGenre.model' import accounts from "./../data/accounts.json" import orders from "./../data/orders.json" @@ -69,8 +70,17 @@ export async function prepopulateDatabase() { for(let band of bands.data) { + // Create a band dataset await Band.create(band) - .then(dataset => { + .then(async dataset => { + // Create the m:n associations for the genres + for (let genreId of band.genreId) { + await BandGenre.create({ + genreId: Number(genreId), + bandId: dataset.dataValues.id + }) + } + Rating.bulkCreate(band.ratings) Member.bulkCreate(band.members) }) diff --git a/software/src/App.vue b/software/src/App.vue index 583720c..a22c8cc 100644 --- a/software/src/App.vue +++ b/software/src/App.vue @@ -65,16 +65,10 @@ watch(() => preferencesStore.language, () => { - + - - - \ No newline at end of file + \ No newline at end of file diff --git a/software/src/components/cardWithTopImage.vue b/software/src/components/cardWithTopImage.vue index 550146e..8ed7f69 100644 --- a/software/src/components/cardWithTopImage.vue +++ b/software/src/components/cardWithTopImage.vue @@ -7,7 +7,7 @@ defineProps({