Hej, tworze platforme z kursami i zadaniami online (powiedzmy dwa typy uslug). Mam tez dwa typy konta: uczen i nauczycel. Chcialbym wprowadzic system recenzji i zastanawiam sie jak to rozwiazac z punktu widzenia baz danych. Mianowicie uczen powinien moc wystawic opinie nauczycielowi zarowno dla "kursu" i "zadania". Chcialbym latwo znalezc:
-
wszystkie oceny wystawione przez ucznia
-
wszystkie oceny otrzymane przez nauczyciela
-
wszystkie oceny przypisane do konkretnego kursu
-
wszystkie oceny przypisane do konkretnego zadania
Dodatkowo, przy zapisywaniu i updaterowaniu kazdej recenzji, powinny sie updateowac 3 srednie w profilu nauczyciela tak zebym nie musial ich za kazdym razem osobno liczyc:
- srednia wszystkich otrzymnych ocen
- srednia ocen z kursow
- srednia ocen z zadan
Myslalem zeby zrobic takie Entity
dla recenzji:
@Entity()
export class ReviewEntity {
@AfterUpdate()
@AfterInsert()
updateAverage() {
const reviews = this.user.reviews;
const grades = reviews.map(item => item.grade)
const average = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;
this.teacher.averageGrade = average(grades);
}
@PrimaryGeneratedColumn('uuid')
id: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@Column({nullable: false})
grade: number;
@Column({ type: "text", default: null })
description: string;
@ManyToOne(() => UserEntity, (user) => user.reviews)
user: UserEntity;
@ManyToOne(() => UserEntity, (teacher) => teacher.reviews)
teacher: UserEntity;
UserEntity
wygladaloby tak:
@Entity()
export class UserEntity {
// Other Columns
...
@Column({ enum: Roles, default: Roles.USER })
role: Roles;
@Column({default: null})
averageGrade: number;
@OneToMany(() => ReviewEntity, (review) => review.user)
reviews: Array<ReviewEntity>;
}
Tutaj reviews
poiwinno zawierac wszystkie oceny wystawione przez uzytkownika (jesli rola uzytkownika to User
) lub wszystkie oceny otrzymane przez nauczyciela. averageGrade
przechowywalaby srednia ze wszystkich ocen. Poki co reviews
w relacji odnosi sie do review.user
, nie wiem jak to rozwiazac zeby dzialalo tez dla nauczyciela. Dodatkowo zastanawiam sie jak rozrozniac oceny kursow od zadan zeby te srednie tez policzyc. Generalnie dopiero zaczynam dzialac z bazami danych i rozwiazanie problemu ktory opisalem bardzo by mi pomogl zrozumiec niektore zasady pracy z bazami danych.