Skip to content

Commit

Permalink
tools and datafiles can be fetched with parameter queries (#699)
Browse files Browse the repository at this point in the history
  • Loading branch information
acashmoney committed Oct 17, 2023
1 parent 18014ad commit 2e5dec7
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 19 deletions.
1 change: 1 addition & 0 deletions frontend/app/components/UserLoader/UserLoader.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const UserLoader = ({ children }) => {
const [isLoaded, setIsLoaded] = useState(false);
const { ready, authenticated } = usePrivy();


const walletAddressFromRedux = useSelector(selectWalletAddress)

useEffect(() => {
Expand Down
52 changes: 44 additions & 8 deletions gateway/handlers/datafiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,20 +80,24 @@ func AddDataFileHandler(db *gorm.DB) http.HandlerFunc {
}
}

// get a single datafile
// Get a single datafile by CID
func GetDataFileHandler(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
utils.SendJSONError(w, "Only GET method is supported", http.StatusBadRequest)
return
}

// Get the ID from the URL
params := mux.Vars(r)
id := params["id"]
vars := mux.Vars(r)
cid := vars["cid"]
if cid == "" {
utils.SendJSONError(w, "Missing CID parameter", http.StatusBadRequest)
return
}

var dataFile models.DataFile
if result := db.First(&dataFile, id); result.Error != nil {
result := db.Where("cid = ?", cid).First(&dataFile)
if result.Error != nil {
http.Error(w, fmt.Sprintf("Error fetching datafile: %v", result.Error), http.StatusInternalServerError)
return
}
Expand All @@ -106,16 +110,48 @@ func GetDataFileHandler(db *gorm.DB) http.HandlerFunc {
}
}

// gets all datafiles
func GetDataFilesHandler(db *gorm.DB) http.HandlerFunc {
// List datafiles based on multiple parameters
func ListDataFilesHandler(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
utils.SendJSONError(w, "Only GET method is supported", http.StatusBadRequest)
return
}

query := db.Model(&models.DataFile{})

if cid := r.URL.Query().Get("cid"); cid != "" {
query = query.Where("cid = ?", cid)
}

if walletAddress := r.URL.Query().Get("walletAddress"); walletAddress != "" {
query = query.Where("wallet_address = ?", walletAddress)
}

if filename := r.URL.Query().Get("filename"); filename != "" {
query = query.Where("filename = ?", filename)
}

if tsBefore := r.URL.Query().Get("tsBefore"); tsBefore != "" {
parsedTime, err := time.Parse(time.RFC3339, tsBefore)
if err != nil {
utils.SendJSONError(w, "Invalid timestamp format, use RFC3339 format", http.StatusBadRequest)
return
}
query = query.Where("timestamp <= ?", parsedTime)
}

if tsAfter := r.URL.Query().Get("tsAfter"); tsAfter != "" {
parsedTime, err := time.Parse(time.RFC3339, tsAfter)
if err != nil {
utils.SendJSONError(w, "Invalid timestamp format, use RFC3339 format", http.StatusBadRequest)
return
}
query = query.Where("timestamp >= ?", parsedTime)
}

var dataFiles []models.DataFile
if result := db.Find(&dataFiles); result.Error != nil {
if result := query.Find(&dataFiles); result.Error != nil {
http.Error(w, fmt.Sprintf("Error fetching datafiles: %v", result.Error), http.StatusInternalServerError)
return
}
Expand Down
16 changes: 15 additions & 1 deletion gateway/handlers/flows.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,22 @@ func ListFlowsHandler(db *gorm.DB) http.HandlerFunc {
return
}

query := db.Model(&models.Flow{})

if cid := r.URL.Query().Get("cid"); cid != "" {
query = query.Where("cid = ?", cid)
}

if name := r.URL.Query().Get("name"); name != "" {
query = query.Where("name = ?", name)
}

if walletAddress := r.URL.Query().Get("walletAddress"); walletAddress != "" {
query = query.Where("wallet_address = ?", walletAddress)
}

var flows []models.Flow
if result := db.Find(&flows); result.Error != nil {
if result := query.Preload("Jobs").Find(&flows); result.Error != nil {
http.Error(w, fmt.Sprintf("Error fetching Flows: %v", result.Error), http.StatusInternalServerError)
return
}
Expand Down
34 changes: 26 additions & 8 deletions gateway/handlers/tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,24 @@ func AddToolHandler(db *gorm.DB) http.HandlerFunc {
}
}

// Get a single tool by CID
func GetToolHandler(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
utils.SendJSONError(w, "Only GET method is supported", http.StatusBadRequest)
return
}

// Get the ID from the URL
params := mux.Vars(r)
cid := params["cid"]
vars := mux.Vars(r)
cid := vars["cid"]
if cid == "" {
utils.SendJSONError(w, "Missing CID parameter", http.StatusBadRequest)
return
}

var tool models.Tool
if result := db.First(&tool, "cid = ?", cid); result.Error != nil {
result := db.Where("cid = ?", cid).First(&tool)
if result.Error != nil {
http.Error(w, fmt.Sprintf("Error fetching tool: %v", result.Error), http.StatusInternalServerError)
return
}
Expand All @@ -120,21 +125,34 @@ func GetToolHandler(db *gorm.DB) http.HandlerFunc {
}
}

func GetToolsHandler(db *gorm.DB) http.HandlerFunc {
// List tools based on multiple parameters
func ListToolsHandler(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
utils.SendJSONError(w, "Only GET method is supported", http.StatusBadRequest)
return
}

query := db.Model(&models.Tool{})

if cid := r.URL.Query().Get("cid"); cid != "" {
query = query.Where("cid = ?", cid)
}

if name := r.URL.Query().Get("name"); name != "" {
query = query.Where("name = ?", name)
}

if walletAddress := r.URL.Query().Get("walletAddress"); walletAddress != "" {
query = query.Where("wallet_address = ?", walletAddress)
}

var tools []models.Tool
if result := db.Find(&tools); result.Error != nil {
if result := query.Find(&tools); result.Error != nil {
http.Error(w, fmt.Sprintf("Error fetching tools: %v", result.Error), http.StatusInternalServerError)
return
}

log.Println("Fetching tools from DB: ", tools)

w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(tools); err != nil {
http.Error(w, "Error encoding tools to JSON", http.StatusInternalServerError)
Expand Down
4 changes: 2 additions & 2 deletions gateway/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ func NewServer(db *gorm.DB) *mux.Router {
router.HandleFunc("/user", handlers.AddUserHandler(db))

router.HandleFunc("/tools", handlers.AddToolHandler(db)).Methods("POST")
router.HandleFunc("/tools", handlers.GetToolsHandler(db)).Methods("GET")
router.HandleFunc("/tools/{cid}", handlers.GetToolHandler(db)).Methods("GET")
router.HandleFunc("/tools", handlers.ListToolsHandler(db)).Methods("GET")

router.HandleFunc("/datafiles", handlers.AddDataFileHandler(db)).Methods("POST")
router.HandleFunc("/datafiles", handlers.GetDataFilesHandler(db)).Methods("GET")
router.HandleFunc("/datafiles/{cid}", handlers.GetDataFileHandler(db)).Methods("GET")
router.HandleFunc("/datafiles", handlers.ListDataFilesHandler(db)).Methods("GET")

router.HandleFunc("/flows", handlers.AddFlowHandler(db)).Methods("POST")
router.HandleFunc("/flows", handlers.ListFlowsHandler(db)).Methods("GET")
Expand Down

0 comments on commit 2e5dec7

Please sign in to comment.