mirror of
https://github.com/dstotijn/hetty.git
synced 2025-07-01 18:47:29 -04:00
Add project management
This commit is contained in:
1248
pkg/api/generated.go
1248
pkg/api/generated.go
File diff suppressed because it is too large
Load Diff
@ -9,6 +9,14 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type CloseProjectResult struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type DeleteProjectResult struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type HTTPHeader struct {
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
@ -34,6 +42,11 @@ type HTTPResponseLog struct {
|
||||
Headers []HTTPHeader `json:"headers"`
|
||||
}
|
||||
|
||||
type Project struct {
|
||||
Name string `json:"name"`
|
||||
IsActive bool `json:"isActive"`
|
||||
}
|
||||
|
||||
type HTTPMethod string
|
||||
|
||||
const (
|
||||
|
@ -7,20 +7,35 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/99designs/gqlgen/graphql"
|
||||
"github.com/dstotijn/hetty/pkg/proj"
|
||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
||||
"github.com/vektah/gqlparser/v2/gqlerror"
|
||||
)
|
||||
|
||||
type Resolver struct {
|
||||
RequestLogService *reqlog.Service
|
||||
ProjectService *proj.Service
|
||||
}
|
||||
|
||||
type queryResolver struct{ *Resolver }
|
||||
type mutationResolver struct{ *Resolver }
|
||||
|
||||
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
|
||||
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
|
||||
func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} }
|
||||
|
||||
func (r *queryResolver) HTTPRequestLogs(ctx context.Context) ([]HTTPRequestLog, error) {
|
||||
opts := reqlog.FindRequestsOptions{OmitOutOfScope: false}
|
||||
reqs, err := r.RequestLogService.FindRequests(ctx, opts)
|
||||
if err == reqlog.ErrNoProject {
|
||||
return nil, &gqlerror.Error{
|
||||
Path: graphql.GetPath(ctx),
|
||||
Message: "No active project.",
|
||||
Extensions: map[string]interface{}{
|
||||
"code": "no_active_project",
|
||||
},
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not query repository for requests: %v", err)
|
||||
}
|
||||
@ -116,3 +131,65 @@ func parseRequestLog(req reqlog.Request) (HTTPRequestLog, error) {
|
||||
|
||||
return log, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) OpenProject(ctx context.Context, name string) (*Project, error) {
|
||||
p, err := r.ProjectService.Open(name)
|
||||
if err == proj.ErrInvalidName {
|
||||
return nil, gqlerror.Errorf("Project name must only contain alphanumeric or space chars.")
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not open project: %v", err)
|
||||
}
|
||||
return &Project{
|
||||
Name: p.Name,
|
||||
IsActive: p.IsActive,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *queryResolver) ActiveProject(ctx context.Context) (*Project, error) {
|
||||
p, err := r.ProjectService.ActiveProject()
|
||||
if err == proj.ErrNoProject {
|
||||
return nil, nil
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not open project: %v", err)
|
||||
}
|
||||
|
||||
return &Project{
|
||||
Name: p.Name,
|
||||
IsActive: p.IsActive,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *queryResolver) Projects(ctx context.Context) ([]Project, error) {
|
||||
p, err := r.ProjectService.Projects()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not get projects: %v", err)
|
||||
}
|
||||
|
||||
projects := make([]Project, len(p))
|
||||
for i, proj := range p {
|
||||
projects[i] = Project{
|
||||
Name: proj.Name,
|
||||
IsActive: proj.IsActive,
|
||||
}
|
||||
}
|
||||
|
||||
return projects, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) CloseProject(ctx context.Context) (*CloseProjectResult, error) {
|
||||
if err := r.ProjectService.Close(); err != nil {
|
||||
return nil, fmt.Errorf("could not close project: %v", err)
|
||||
}
|
||||
return &CloseProjectResult{true}, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) DeleteProject(ctx context.Context, name string) (*DeleteProjectResult, error) {
|
||||
if err := r.ProjectService.Delete(name); err != nil {
|
||||
return nil, fmt.Errorf("could not delete project: %v", err)
|
||||
}
|
||||
return &DeleteProjectResult{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
@ -23,9 +23,30 @@ type HttpHeader {
|
||||
value: String!
|
||||
}
|
||||
|
||||
type Project {
|
||||
name: String!
|
||||
isActive: Boolean!
|
||||
}
|
||||
|
||||
type CloseProjectResult {
|
||||
success: Boolean!
|
||||
}
|
||||
|
||||
type DeleteProjectResult {
|
||||
success: Boolean!
|
||||
}
|
||||
|
||||
type Query {
|
||||
httpRequestLog(id: ID!): HttpRequestLog
|
||||
httpRequestLogs: [HttpRequestLog!]!
|
||||
activeProject: Project
|
||||
projects: [Project!]!
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
openProject(name: String!): Project
|
||||
closeProject: CloseProjectResult!
|
||||
deleteProject(name: String!): DeleteProjectResult!
|
||||
}
|
||||
|
||||
enum HttpMethod {
|
||||
|
Reference in New Issue
Block a user