Skip to content

Commit

Permalink
feat: add starring repository
Browse files Browse the repository at this point in the history
  • Loading branch information
mabdh committed Feb 3, 2022
1 parent 501735c commit 5a21b5c
Show file tree
Hide file tree
Showing 77 changed files with 4,010 additions and 364 deletions.
39 changes: 35 additions & 4 deletions api/handlers/asset_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package handlers

import (
"encoding/json"
"errors"
"fmt"
"net/http"
"net/url"
Expand All @@ -12,23 +13,27 @@ import (

"github.com/odpf/columbus/asset"
"github.com/odpf/columbus/discovery"
"github.com/odpf/columbus/star"
)

// AssetHandler exposes a REST interface to types
type AssetHandler struct {
logger log.Logger
assetRepository asset.Repository
discoveryRepo discovery.Repository
logger log.Logger
starService *star.Service
}

func NewAssetHandler(
logger log.Logger,
assetRepository asset.Repository,
discoveryRepo discovery.Repository) *AssetHandler {
discoveryRepo discovery.Repository,
starService *star.Service) *AssetHandler {
handler := &AssetHandler{
logger: logger,
assetRepository: assetRepository,
discoveryRepo: discoveryRepo,
logger: logger,
starService: starService,
}

return handler
Expand Down Expand Up @@ -92,10 +97,13 @@ func (h *AssetHandler) Upsert(w http.ResponseWriter, r *http.Request) {
return
}

if err := h.assetRepository.Upsert(r.Context(), &ast); err != nil {
var assetID string
if assetID, err = h.assetRepository.Upsert(r.Context(), &ast); err != nil {
internalServerError(w, h.logger, err.Error())
return
}

ast.ID = assetID
if err := h.discoveryRepo.Upsert(r.Context(), ast); err != nil {
internalServerError(w, h.logger, err.Error())
return
Expand Down Expand Up @@ -127,6 +135,29 @@ func (h *AssetHandler) Delete(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusNoContent, nil)
}

func (h *AssetHandler) GetStargazers(w http.ResponseWriter, r *http.Request) {
starCfg := buildStarConfig(h.logger, r.URL.Query())

pathParams := mux.Vars(r)
assetID := pathParams["id"]

users, err := h.starService.GetStargazersByID(r.Context(), starCfg, assetID)
if err != nil {
if errors.As(err, new(star.InvalidError)) {
writeJSONError(w, http.StatusBadRequest, err.Error())
return
}
if errors.As(err, new(star.NotFoundError)) {
writeJSONError(w, http.StatusNotFound, err.Error())
return
}
internalServerError(w, h.logger, err.Error())
return
}

writeJSON(w, http.StatusOK, users)
}

func (h *AssetHandler) validateAsset(ast asset.Asset) error {
if ast.URN == "" {
return fmt.Errorf("urn is required")
Expand Down
Loading

0 comments on commit 5a21b5c

Please sign in to comment.