sw api endpoint
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user