@@ -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+
273302func 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+ }
0 commit comments