feat(server): added better query params to GitRepo API
							parent
							
								
									7627b28bcf
								
							
						
					
					
						commit
						1e079143cd
					
				|  | @ -0,0 +1,25 @@ | |||
| module db | ||||
| 
 | ||||
| pub struct GitRepoFilter { | ||||
| pub mut: | ||||
| 	limit  u64 = 25 | ||||
| 	offset u64 | ||||
| 	repo   string | ||||
| } | ||||
| 
 | ||||
| pub fn filter_from_params<T>(params map[string]string) ?T { | ||||
| 	mut o := GitRepoFilter{} | ||||
| 
 | ||||
| 	$for field in T.fields { | ||||
| 		if field.name in params { | ||||
| 			val := params[field.name] | ||||
| 
 | ||||
| 			$if field.typ is string { | ||||
| 				o.$(field.name) = val | ||||
| 			} $else $if field.typ is u64 { | ||||
| 				o.$(field.name) = val.u64() | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return o | ||||
| } | ||||
							
								
								
									
										14
									
								
								src/db/git.v
								
								
								
								
							
							
						
						
									
										14
									
								
								src/db/git.v
								
								
								
								
							|  | @ -77,9 +77,19 @@ pub fn git_repo_from_params(params map[string]string) ?GitRepo { | |||
| } | ||||
| 
 | ||||
| // get_git_repos returns all GitRepo's in the database. | ||||
| pub fn (db &VieterDb) get_git_repos() []GitRepo { | ||||
| pub fn (db &VieterDb) get_git_repos(filter GitRepoFilter) []GitRepo { | ||||
| 	// This seems to currently be blocked by a bug in the ORM, I'll have to ask | ||||
| 	// around. | ||||
| 	if filter.repo != '' { | ||||
| 		res := sql db.conn { | ||||
| 			select from GitRepo where repo == filter.repo order by id limit filter.limit offset filter.offset | ||||
| 		} | ||||
| 
 | ||||
| 		return res | ||||
| 	} | ||||
| 
 | ||||
| 	res := sql db.conn { | ||||
| 		select from GitRepo order by id | ||||
| 		select from GitRepo order by id limit filter.limit offset filter.offset | ||||
| 	} | ||||
| 
 | ||||
| 	return res | ||||
|  |  | |||
|  | @ -12,7 +12,10 @@ fn (mut app App) get_repos() web.Result { | |||
| 		return app.json(http.Status.unauthorized, new_response('Unauthorized.')) | ||||
| 	} | ||||
| 
 | ||||
| 	repos := app.db.get_git_repos() | ||||
| 	filter := db.filter_from_params<db.GitRepoFilter>(app.query) or { | ||||
| 		return app.json(http.Status.bad_request, new_response('Invalid query parameters.')) | ||||
| 	} | ||||
| 	repos := app.db.get_git_repos(filter) | ||||
| 
 | ||||
| 	return app.json(http.Status.ok, new_data_response(repos)) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue