IO-Lab2 / API

API component for the project
0 stars 1 forks source link

Dorobić pochodne modele do wsadzania, aktualizowania i usuwania rekordów #1

Closed NaviteLogger closed 17 hours ago

NaviteLogger commented 2 days ago

Do modeli w GO przydałoby się dorobić też struktury pochodne. Co mam na myśli:

type Scientist struct {
    ID            uuid.UUID `db:"id" json:"id"`
    FirstName     string    `db:"first_name" json:"first_name"`
    LastName      string    `db:"last_name" json:"last_name"`
    AcademicTitle string    `db:"academic_title" json:"academic_title"`
    ResearchArea  string    `db:"research_area" json:"research_area"`
    Email         string    `db:"email" json:"email"`
    ProfileUrl    string    `db:"profile_url" json:"profile_url"`
    CreatedAt     time.Time `db:"created_at" json:"created_at"`
    UpdatedAt     time.Time `db:"updated_at" json:"updated_at"`
}

Ten model jest przydatny gdy chce wyciągąć dany rekord z bazy danych - w ten sposób mapujesz cały jeden rząd na tą strukturę. A co w przypadku gdy chcesz wsadzić model do bazy danych? Wtedy wystarczy posłużyć się:

type CreateScientist struct {
    FirstName     string    `db:"first_name" json:"first_name"`
    LastName      string    `db:"last_name" json:"last_name"`
    AcademicTitle string    `db:"academic_title" json:"academic_title"`
    ResearchArea  string    `db:"research_area" json:"research_area"`
    Email         string    `db:"email" json:"email"`
    ProfileUrl    string    `db:"profile_url" json:"profile_url"`
}

ponieważ baza danych sama stworzy Ci unikatowe UUID oraz daty. Dla aktualizacji modelu potrzebujemy:

type UpdateScientist struct {
    ID            uuid.UUID `db:"id" json:"id"`
    FirstName     string    `db:"first_name" json:"first_name"`
    LastName      string    `db:"last_name" json:"last_name"`
    AcademicTitle string    `db:"academic_title" json:"academic_title"`
    ResearchArea  string    `db:"research_area" json:"research_area"`
    Email         string    `db:"email" json:"email"`
    ProfileUrl    string    `db:"profile_url" json:"profile_url"`
    UpdatedAt     time.Time `db:"updated_at" json:"updated_at"`
}

A do usuwania starczy:

type DeleteScientist struct {
    ID            uuid.UUID `db:"id" json:"id"`
}
tymiasas00 commented 17 hours ago

Już. https://github.com/IO-Lab2/API/commit/67bac30df791a96cc13936f11bfb55d773a98e26