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. | // 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 { | 		res := sql db.conn { | ||||||
| 		select from GitRepo order by id | 			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 limit filter.limit offset filter.offset | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return res | 	return res | ||||||
|  |  | ||||||
|  | @ -12,7 +12,10 @@ fn (mut app App) get_repos() web.Result { | ||||||
| 		return app.json(http.Status.unauthorized, new_response('Unauthorized.')) | 		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)) | 	return app.json(http.Status.ok, new_data_response(repos)) | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue