Language Stack fertig gestellt und dokumentiert

This commit is contained in:
2026-07-26 14:47:20 +02:00
parent 2517600524
commit 28fb522f70
2 changed files with 277 additions and 38 deletions
@@ -4,11 +4,13 @@ import (
"database/sql"
"net/http"
"scpq-editor-server/models"
"strconv"
)
type LanguagesRepository struct {
dbHandler *sql.DB
dbHandler *sql.DB
}
func NewLanguagesRepository(dbHandler *sql.DB) *LanguagesRepository {
return &LanguagesRepository{
dbHandler: dbHandler,
@@ -16,23 +18,23 @@ func NewLanguagesRepository(dbHandler *sql.DB) *LanguagesRepository {
}
func (rr LanguagesRepository) CreateLanguage(language *models.Language) (*models.Language, *models.ResponseError) {
query:=`INSERT INTO languages(locale, language) VALUES($1,$2) RETURNING id`
query := `INSERT INTO languages(locale, language) VALUES($1,$2) RETURNING id`
rows, err := rr.dbHandler.Query(query, language.Locale, language.Language)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
defer rows.Close()
var languageId int
var idstr string
for rows.Next() {
err := rows.Scan(languageId)
err := rows.Scan(&idstr)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
}
@@ -42,59 +44,145 @@ func (rr LanguagesRepository) CreateLanguage(language *models.Language) (*models
Status: http.StatusInternalServerError,
}
}
languageId, err := strconv.Atoi(idstr)
if err != nil {
return nil, &models.ResponseError{
Message: "language id not int",
Status: http.StatusInternalServerError,
}
}
return &models.Language{
ID: languageId,
Locale: language.Locale,
Language: language.Language,
ID: languageId,
Locale: language.Locale,
Language: language.Language,
}, nil
}
func (rr LanguagesRepository) UpdateLanguage(language *models.Language) *models.ResponseError {
return &models.ResponseError{
Message: "UpdateLanguage not yet implementet",
Status: http.StatusInternalServerError,
query := `UPDATE languages SET locale=$1, language=$2 WHERE id=$3`
res, err := rr.dbHandler.Exec(query, language.Locale, language.Language, language.ID)
if err != nil {
return &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
rowsAffeced, err := res.RowsAffected()
if err != nil {
return &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
if rowsAffeced == 0 {
return &models.ResponseError{
Message: "No language found with the given id",
Status: http.StatusNotFound,
}
}
return nil
}
func (rr LanguagesRepository) DeleteLanguage(languageId int) *models.ResponseError {
return &models.ResponseError{
Message: "UpdateLanguage not yet implementet",
Status: http.StatusInternalServerError,
query := `DELETE FROM languages WHERE id=$1`
res, err := rr.dbHandler.Exec(query, languageId)
if err != nil {
return &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
rowsAffeced, err := res.RowsAffected()
if err != nil {
return &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
if rowsAffeced == 0 {
return &models.ResponseError{
Message: "No language found with the given id",
Status: http.StatusNotFound,
}
}
return nil
}
func (rr LanguagesRepository) GetLanguage(languageId int) (*models.Language, *models.ResponseError) {
return nil, &models.ResponseError{
Message: "UpdateLanguage not yet implementet",
Status: http.StatusInternalServerError,
query := `SELECT id, locale, language FROM languages WHERE id=$1`
rows, err := rr.dbHandler.Query(query, languageId)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
defer rows.Close()
var idstr, locale, language string
for rows.Next() {
err := rows.Scan(&idstr, &locale, &language)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
}
if rows.Err() != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
if err != nil {
return nil, &models.ResponseError{
Message: "language id not int",
Status: http.StatusInternalServerError,
}
}
return &models.Language{
ID: languageId,
Locale: locale,
Language: language,
}, nil
}
func (rr LanguagesRepository) GetAllLanguages()([]*models.Language, *models.ResponseError) {
query:="SELECT * FROM languages"
func (rr LanguagesRepository) GetAllLanguages() ([]*models.Language, *models.ResponseError) {
query := "SELECT id, locale, language FROM languages"
rows, err := rr.dbHandler.Query(query)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
defer rows.Close()
languages := make([]*models.Language, 0)
var id int
var locale, language string
var idstr, locale, language string
for rows.Next() {
err := rows.Scan(id, locale, language)
err := rows.Scan(&idstr, &locale, &language)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
language := &models.Language {
ID: id,
Locale: locale,
Language: language,
id, err := strconv.Atoi(idstr)
if err != nil {
return nil, &models.ResponseError{
Message: "language id not int",
Status: http.StatusInternalServerError,
}
}
language := &models.Language{
ID: id,
Locale: locale,
Language: language,
}
languages = append(languages, language)
}