Skip to content

Commit 1ad5991

Browse files
committed
chore: some more small nits + search component
1 parent 23bdf81 commit 1ad5991

File tree

7 files changed

+662
-9
lines changed

7 files changed

+662
-9
lines changed

frontend/agent/agent.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,16 @@ type InputFileEvent struct {
2323
FileName string `json:"file_name"`
2424
}
2525

26-
type FilesResponseResult struct {
26+
type FilesResultValue struct {
2727
Success bool `json:"success"`
2828
Error *string `json:"error"`
2929
}
30+
type FilesResponseResult struct {
31+
Value FilesResultValue `json:"value"`
32+
QualifiedName string `json:"qualified_name"`
33+
Type string `json:"type"`
34+
Types []string `json:"types"`
35+
}
3036

3137
type FilesResponseBody struct {
3238
HandlerId string `json:"handler_id"`
@@ -40,6 +46,10 @@ type FilesResponseBody struct {
4046
Result *FilesResponseResult `json:"result"`
4147
}
4248

49+
func (b *FilesResponseBody) GetErrorString() *string {
50+
return b.Result.Value.Error
51+
}
52+
4353
type SearchRequestBody struct {
4454
StartEvent SearchInputEvent `json:"start_event"`
4555
Context map[string]any `json:"context"`
@@ -62,10 +72,17 @@ type SearchResult struct {
6272
Category string `json:"category"`
6373
}
6474

65-
type SearchResponseResult struct {
75+
type SearchResultValue struct {
6676
Results []SearchResult `json:"results"`
6777
}
6878

79+
type SearchResponseResult struct {
80+
Value SearchResultValue `json:"value"`
81+
QualifiedName string `json:"qualified_name"`
82+
Type string `json:"type"`
83+
Types []string `json:"types"`
84+
}
85+
6986
type SearchResponseBody struct {
7087
HandlerId string `json:"handler_id"`
7188
WorkflowName string `json:"workflow_name"`
@@ -78,6 +95,13 @@ type SearchResponseBody struct {
7895
Result *SearchResponseResult `json:"result"`
7996
}
8097

98+
func (b *SearchResponseBody) GetResults() []SearchResult {
99+
if b.Result != nil {
100+
return b.Result.Value.Results
101+
}
102+
return nil
103+
}
104+
81105
func ProcessFile(fileInput InputFileEvent) (*FilesResponseBody, error) {
82106
requestBody := FilesRequestBody{StartEvent: fileInput, Context: map[string]any{}, HandlerId: ""}
83107
apiKey := os.Getenv("LLAMA_CLOUD_API_KEY")
@@ -162,15 +186,15 @@ func ProcessSearch(searchInput SearchInputEvent) (*SearchResponseBody, error) {
162186
return nil, err
163187
}
164188

189+
if resp.StatusCode != http.StatusOK {
190+
return nil, errors.New(string(body))
191+
}
192+
165193
var response SearchResponseBody
166194

167195
err = json.Unmarshal(body, &response)
168196
if err != nil {
169197
return nil, err
170198
}
171-
// Check status code
172-
if resp.StatusCode != http.StatusOK {
173-
return nil, errors.New(*response.Error)
174-
}
175199
return &response, nil
176200
}

frontend/handlers/handlers.go

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ func HandleUploadFile(c *fiber.Ctx) error {
228228
if err != nil {
229229
return templates.StatusBanner(err).Render(c.Context(), c.Response().BodyWriter())
230230
}
231-
if response.Result.Error != nil {
232-
return templates.StatusBanner(errors.New(*response.Result.Error)).Render(c.Context(), c.Response().BodyWriter())
231+
if response.GetErrorString() != nil {
232+
return templates.StatusBanner(errors.New(*response.GetErrorString())).Render(c.Context(), c.Response().BodyWriter())
233233
}
234234
db, err := files.CreateNewDb()
235235
if err != nil {
@@ -270,6 +270,35 @@ func HandleDeleteFile(c *fiber.Ctx) error {
270270
return templates.FilesList(files).Render(c.Context(), c.Response().BodyWriter())
271271
}
272272

273+
func HandleSearch(c *fiber.Ctx) error {
274+
user, err := auth.AuthorizePost(c)
275+
c.Set("Content-Type", "text/html")
276+
if err != nil {
277+
return templates.StatusBanner(err).Render(c.Context(), c.Response().BodyWriter())
278+
}
279+
searchType := c.FormValue("search_type")
280+
searchInput := c.FormValue("search_input")
281+
fileName := c.FormValue("file_name") // only one file name is allowed (can be empty)
282+
category := c.FormValue("category") // select among available categories (can be empty)
283+
var categoryFilter *string
284+
var fileNameFilter *string
285+
if category == "" {
286+
categoryFilter = nil
287+
} else {
288+
categoryFilter = &category
289+
}
290+
if fileName == "" {
291+
fileNameFilter = nil
292+
} else {
293+
fileNameFilter = &fileName
294+
}
295+
searchResult, err := agent.ProcessSearch(agent.SearchInputEvent{SearchType: searchType, SearchInput: searchInput, Category: categoryFilter, FileName: fileNameFilter, Username: user.Username})
296+
if err != nil {
297+
return templates.StatusBanner(err).Render(c.Context(), c.Response().BodyWriter())
298+
}
299+
return templates.SearchResultsList(searchResult.GetResults()).Render(c.Context(), c.Response().BodyWriter())
300+
}
301+
273302
func LoginRoute(c *fiber.Ctx) error {
274303
if c.Method() != fiber.MethodGet {
275304
return c.SendStatus(fiber.StatusMethodNotAllowed)
@@ -344,7 +373,46 @@ func FilesRoute(c *fiber.Ctx) error {
344373
queries := filesdb.New(db)
345374
files, err := queries.GetFiles(context.Background(), user.Username)
346375
if err != nil {
376+
if errors.Is(err, pgx.ErrNoRows) {
377+
return templates.FilesPage([]filesdb.File{}).Render(c.Context(), c.Response().BodyWriter())
378+
}
347379
return templates.Page500(err).Render(c.Context(), c.Response().BodyWriter())
348380
}
349381
return templates.FilesPage(files).Render(c.Context(), c.Response().BodyWriter())
350382
}
383+
384+
func SearchRoute(c *fiber.Ctx) error {
385+
if c.Method() != fiber.MethodGet {
386+
return c.SendStatus(fiber.StatusMethodNotAllowed)
387+
}
388+
user, err := auth.AuthorizeGet(c)
389+
c.Set("Content-Type", "text/html")
390+
if err != nil {
391+
return templates.AuthFailedPage().Render(c.Context(), c.Response().BodyWriter())
392+
}
393+
db, err := rules.CreateNewDb()
394+
if err != nil {
395+
return templates.Page500(err).Render(c.Context(), c.Response().BodyWriter())
396+
}
397+
queries := rulesdb.New(db)
398+
rules, err := queries.GetRules(context.Background(), user.Username)
399+
if err != nil {
400+
if !errors.Is(err, pgx.ErrNoRows) {
401+
return templates.Page500(err).Render(c.Context(), c.Response().BodyWriter())
402+
}
403+
rules = []rulesdb.Rule{}
404+
}
405+
dbFiles, err := files.CreateNewDb()
406+
if err != nil {
407+
return templates.Page500(err).Render(c.Context(), c.Response().BodyWriter())
408+
}
409+
queriesFiles := filesdb.New(dbFiles)
410+
files, err := queriesFiles.GetFiles(context.Background(), user.Username)
411+
if err != nil {
412+
if !errors.Is(err, pgx.ErrNoRows) {
413+
return templates.Page500(err).Render(c.Context(), c.Response().BodyWriter())
414+
}
415+
files = []filesdb.File{}
416+
}
417+
return templates.SearchPage(rules, files).Render(c.Context(), c.Response().BodyWriter())
418+
}

frontend/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ func Setup() *fiber.App {
126126
app.Get("/notes", corsSetup("GET"), handlers.FilesRoute)
127127
app.Post("/notes", limiterSetup(10), corsSetup("POST"), handlers.HandleUploadFile)
128128
app.Delete("/notes/:id", limiterSetup(10), corsSetup("DELETE"), handlers.HandleDeleteFile)
129+
app.Get("/review", corsSetup("GET"), handlers.SearchRoute)
130+
app.Post("/review", limiterSetup(10), corsSetup("POST"), handlers.HandleSearch)
129131
app.Get("/", handlers.HomeRoute)
130132
app.Static("/static", "./static/")
131133
app.Use(handlers.PageDoesNotExistRoute)

frontend/templates/notes.templ

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ templ UploadFileModal() {
189189
Upload
190190
</button>
191191
</div>
192+
<br>
192193
<div id="loadingIndicator" class="htmx-indicator flex justify-center items-center">
193194
<span class="loading loading-spinner loading-lg"></span>
194195
</div>

frontend/templates/notes_templ.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)