48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package http
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"teletype_softwares/domain"
|
|
)
|
|
|
|
type APISoftwareController struct {
|
|
softwareService domain.SoftwareServiceInterface
|
|
}
|
|
|
|
func NewAPISoftwareController(software_service domain.SoftwareServiceInterface) *APISoftwareController {
|
|
return &APISoftwareController{softwareService: software_service}
|
|
}
|
|
|
|
func replaceReleasePaths(release *domain.Release) {
|
|
release.CartridgePath = strings.ReplaceAll(release.CartridgePath, "/softwares/", "/file/")
|
|
release.SourcePath = strings.ReplaceAll(release.SourcePath, "/softwares/", "/file/")
|
|
release.HTMLFolderPath = strings.ReplaceAll(release.HTMLFolderPath, "/softwares/", "/file/")
|
|
release.DocsFolderPath = strings.ReplaceAll(release.DocsFolderPath, "/softwares/", "/file/")
|
|
}
|
|
|
|
func (c *APISoftwareController) Index(w http.ResponseWriter, r *http.Request) {
|
|
softwares, _ := c.softwareService.DetailedList()
|
|
|
|
for idx := range softwares.Softwares {
|
|
softwareShowData := &softwares.Softwares[idx]
|
|
|
|
for i := range softwareShowData.Releases {
|
|
replaceReleasePaths(&softwareShowData.Releases[i])
|
|
}
|
|
|
|
// LatestRelease és WebPlayableRelease a Releases slice elemeire mutat,
|
|
// ezért ezeket külön is frissíteni kell, mivel értékmásolat kerülhet bele
|
|
if softwareShowData.LatestRelease != nil {
|
|
replaceReleasePaths(softwareShowData.LatestRelease)
|
|
}
|
|
if softwareShowData.WebPlayableRelease != nil {
|
|
replaceReleasePaths(softwareShowData.WebPlayableRelease)
|
|
}
|
|
}
|
|
|
|
json.NewEncoder(w).Encode(softwares)
|
|
}
|