fixes (the last)

This commit is contained in:
2025-08-18 22:10:27 +02:00
parent 0f2c0e511f
commit 9a14571c31
4 changed files with 65 additions and 8 deletions

9
.vscode/launch.json vendored
View File

@@ -13,6 +13,15 @@
"console": "integratedTerminal", "console": "integratedTerminal",
"program": "${workspaceFolder}/cmd/web" "program": "${workspaceFolder}/cmd/web"
}, },
{
"name": "server",
"type": "go",
"request": "launch",
"mode": "auto",
"args": ["-document-root", "${workspaceFolder}/env"],
"console": "integratedTerminal",
"program": "${workspaceFolder}/cmd/server"
},
{ {
"name": "cli", "name": "cli",
"type": "go", "type": "go",

View File

@@ -164,6 +164,12 @@ func (s HTTPServer) upload(w http.ResponseWriter, r *http.Request) {
return return
} }
if err := s.Service.ReloadCache(id); err != nil {
fmt.Fprintln(os.Stderr, "error: failed to reload data from the disk:", err)
internalServerError(w, r)
return
}
// Respond success // Respond success
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
} }
@@ -215,7 +221,13 @@ func (s HTTPServer) histUpload(w http.ResponseWriter, r *http.Request) {
defer file.Close() defer file.Close()
if err := s.Service.CopyBackup(gameID, uuid, file); err != nil { if err := s.Service.CopyBackup(gameID, uuid, file); err != nil {
fmt.Fprintln(os.Stderr, "error: failed to write data to disk:", err) fmt.Fprintln(os.Stderr, "error: failed to write data to the disk:", err)
internalServerError(w, r)
return
}
if err := s.Service.ReloadCache(gameID); err != nil {
fmt.Fprintln(os.Stderr, "error: failed to reload data from the disk:", err)
internalServerError(w, r) internalServerError(w, r)
return return
} }
@@ -271,7 +283,6 @@ func (s HTTPServer) histExists(w http.ResponseWriter, r *http.Request) {
ok(finfo, w, r) ok(finfo, w, r)
} }
func (s HTTPServer) metadata(w http.ResponseWriter, r *http.Request) { func (s HTTPServer) metadata(w http.ResponseWriter, r *http.Request) {
id := chi.URLParam(r, "id") id := chi.URLParam(r, "id")
metadata, err := s.Service.One(id) metadata, err := s.Service.One(id)

View File

@@ -378,6 +378,13 @@ func (l Service) Repository() repository.Repository {
return l.repo return l.repo
} }
func (l Service) ReloadCache(gameID string) error {
if er, ok := l.repo.(*repository.EagerRepository); ok {
return er.ReloadMetadata(repository.NewGameIdentifier(gameID))
}
return nil
}
func (l Service) apply(src, dst string) error { func (l Service) apply(src, dst string) error {
if err := os.RemoveAll(dst); err != nil { if err := os.RemoveAll(dst); err != nil {
return fmt.Errorf("failed to remove old save: %w", err) return fmt.Errorf("failed to remove old save: %w", err)

View File

@@ -474,12 +474,6 @@ func (r *EagerRepository) WriteMetadata(id GameIdentifier, m Metadata) error {
return err return err
} }
// reload from disk because of md5
m, err = r.Repository.Metadata(id)
if err != nil {
return err
}
d := r.data[id.gameID] d := r.data[id.gameID]
d.Metadata = m d.Metadata = m
r.data[id.gameID] = d r.data[id.gameID] = d
@@ -539,3 +533,39 @@ func (r *EagerRepository) Remove(id GameIdentifier) error {
delete(r.data, id.gameID) delete(r.data, id.gameID)
return nil return nil
} }
func (r *EagerRepository) ReloadMetadata(id GameIdentifier) error {
backup, err := r.Repository.AllHist(id)
if err != nil {
return fmt.Errorf("[%s] failed to load hist data: %w", id, err)
}
remote, err := r.Repository.Remote(id)
if err != nil {
return fmt.Errorf("[%s] failed to load remote metadata: %w", id, err)
}
m, err := r.Repository.Metadata(id)
if err != nil {
return fmt.Errorf("[%s] failed to load metadata: %w", id, err)
}
backups := make(map[string]Backup)
for _, b := range backup {
info, err := r.Repository.Backup(NewBackupIdentifier(id.gameID, b))
if err != nil {
return fmt.Errorf("[%s] failed to get backup information: %w", id, err)
}
backups[b] = info
}
r.data[id.gameID] = Data{
Metadata: m,
Remote: remote,
DataPath: r.DataPath(id),
Backup: backups,
}
return nil
}