sw api endpoint

This commit is contained in:
2026-03-01 19:48:44 +01:00
parent f60a5786f6
commit 7623abb01d
4 changed files with 51 additions and 0 deletions
+23
View File
@@ -10,6 +10,10 @@ type SoftwareListDTO struct {
LatestRelease *Release
}
type SoftwareDetaildListDTO struct {
Softwares []SoftwareShowData
}
type SoftwareShowData struct {
Software *Software
Releases []Release
@@ -19,6 +23,7 @@ type SoftwareShowData struct {
type SoftwareServiceInterface interface {
List() ([]SoftwareListDTO, error)
DetailedList() (*SoftwareDetaildListDTO, error)
GetByName(name string) (*Software, error)
GetLatestRelease(software_id string) (*Release, error)
GetForShowByName(name string) (*SoftwareShowData, error)
@@ -116,3 +121,21 @@ func (s *SoftwareService) GetLatestRelease(software_id string) (*Release, error)
})
return &software.Releases[0], nil
}
func (s *SoftwareService) DetailedList() (*SoftwareDetaildListDTO, error) {
softwares, err := s.softeare_repository.List()
if err != nil {
return nil, err
}
dtos := make([]SoftwareShowData, 0, len(softwares))
for _, software := range softwares {
showData, err := s.GetForShowByName(software.Name)
if err != nil {
return nil, err
}
dtos = append(dtos, *showData)
}
return &SoftwareDetaildListDTO{Softwares: dtos}, nil
}
+21
View File
@@ -0,0 +1,21 @@
package http
import (
"encoding/json"
"net/http"
"teletype_softwares/domain"
)
type APISoftwareController struct {
softwareService domain.SoftwareServiceInterface
}
func NewAPISoftwareController(software_service domain.SoftwareServiceInterface) *APISoftwareController {
return &APISoftwareController{softwareService: software_service}
}
func (c *APISoftwareController) Index(w http.ResponseWriter, r *http.Request) {
softwares, _ := c.softwareService.DetailedList()
json.NewEncoder(w).Encode(softwares)
}
+1
View File
@@ -7,6 +7,7 @@ import (
func StartHttpServer(domain_instance domain.Domain) {
router := NewRouter(
NewAPISoftwareController(domain_instance.SoftwareService),
NewSoftwareController(domain_instance.SoftwareService),
NewSoftwareUpdaterController(domain_instance.SoftwareUpdaterService, domain_instance.SoftwareService),
NewDownloadController(domain_instance.DownloadService, domain_instance.SoftwareService),
+6
View File
@@ -7,6 +7,7 @@ import (
)
type Router struct {
apiSoftwareController *APISoftwareController
softwareController *SoftwareController
softwareUpdaterController *SoftwareUpdaterController
downloadController *DownloadController
@@ -16,6 +17,7 @@ type Router struct {
}
func NewRouter(
api_software_controller *APISoftwareController,
software_controller *SoftwareController,
software_updater_controller *SoftwareUpdaterController,
download_controller *DownloadController,
@@ -24,6 +26,7 @@ func NewRouter(
docs_controller *DocsController,
) *Router {
return &Router{
apiSoftwareController: api_software_controller,
softwareController: software_controller,
softwareUpdaterController: software_updater_controller,
downloadController: download_controller,
@@ -38,6 +41,9 @@ func (r *Router) Init() *chi.Mux {
router.Use(CORSMiddleware)
router.Get("/", r.rootController.Index)
router.Get("/api/software", r.apiSoftwareController.Index)
router.Get("/software", r.softwareController.Index)
router.Get("/software/{name}", r.softwareController.Show)