@@ -553,3 +553,136 @@ func (c *Client) GetCurrentUser(ctx context.Context) (*UserResponse, error) {
553553 }
554554 return & result , nil
555555}
556+
557+ // Project operations
558+ func (c * Client ) CreateProject (ctx context.Context , project ProjectRequest ) (* ProjectResponse , error ) {
559+ endpoint := "/api/v1/projects"
560+ resp , _ , err := c .doRequest (ctx , "POST" , endpoint , project )
561+ if err != nil {
562+ return nil , err
563+ }
564+ defer resp .Body .Close ()
565+
566+ var result ProjectResponse
567+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
568+ return nil , fmt .Errorf ("error decoding project response: %v" , err )
569+ }
570+ return & result , nil
571+ }
572+
573+ func (c * Client ) GetProject (ctx context.Context , nameOrID string ) (* ProjectResponse , error ) {
574+ endpoint := fmt .Sprintf ("/api/v1/projects/%s" , nameOrID )
575+ resp , status , err := c .doRequest (ctx , "GET" , endpoint , nil )
576+ if err != nil {
577+ if status == 404 {
578+ return nil , fmt .Errorf ("404" )
579+ }
580+ return nil , err
581+ }
582+ defer resp .Body .Close ()
583+
584+ var result ProjectResponse
585+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
586+ return nil , fmt .Errorf ("error decoding project response: %v" , err )
587+ }
588+ return & result , nil
589+ }
590+
591+ func (c * Client ) UpdateProject (ctx context.Context , nameOrID string , project ProjectUpdate ) (* ProjectResponse , error ) {
592+ endpoint := fmt .Sprintf ("/api/v1/projects/%s" , nameOrID )
593+ resp , _ , err := c .doRequest (ctx , "PUT" , endpoint , project )
594+ if err != nil {
595+ return nil , err
596+ }
597+ defer resp .Body .Close ()
598+
599+ var result ProjectResponse
600+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
601+ return nil , fmt .Errorf ("error decoding project response: %v" , err )
602+ }
603+ return & result , nil
604+ }
605+
606+ func (c * Client ) DeleteProject (ctx context.Context , nameOrID string ) error {
607+ endpoint := fmt .Sprintf ("/api/v1/projects/%s" , nameOrID )
608+ resp , status , err := c .doRequest (ctx , "DELETE" , endpoint , nil )
609+ if err != nil {
610+ if status == 404 {
611+ return fmt .Errorf ("404" )
612+ }
613+ return err
614+ }
615+ defer resp .Body .Close ()
616+ return nil
617+ }
618+
619+ func (c * Client ) ListProjects (ctx context.Context , params ProjectFilterParams ) (* PageProjectResponse , error ) {
620+ endpoint := "/api/v1/projects"
621+
622+ // Build query parameters
623+ query := make (url.Values )
624+ if params .Hydrate != nil {
625+ query .Set ("hydrate" , fmt .Sprintf ("%t" , * params .Hydrate ))
626+ }
627+ if params .SortBy != nil {
628+ query .Set ("sort_by" , * params .SortBy )
629+ }
630+ if params .LogicalOperator != nil {
631+ query .Set ("logical_operator" , string (* params .LogicalOperator ))
632+ }
633+ if params .Page != nil {
634+ query .Set ("page" , fmt .Sprintf ("%d" , * params .Page ))
635+ }
636+ if params .Size != nil {
637+ query .Set ("size" , fmt .Sprintf ("%d" , * params .Size ))
638+ }
639+ if params .ID != nil {
640+ query .Set ("id" , * params .ID )
641+ }
642+ if params .Created != nil {
643+ query .Set ("created" , * params .Created )
644+ }
645+ if params .Updated != nil {
646+ query .Set ("updated" , * params .Updated )
647+ }
648+ if params .Name != nil {
649+ query .Set ("name" , * params .Name )
650+ }
651+ if params .DisplayName != nil {
652+ query .Set ("display_name" , * params .DisplayName )
653+ }
654+
655+ if len (query ) > 0 {
656+ endpoint += "?" + query .Encode ()
657+ }
658+
659+ resp , _ , err := c .doRequest (ctx , "GET" , endpoint , nil )
660+ if err != nil {
661+ return nil , err
662+ }
663+ defer resp .Body .Close ()
664+
665+ var result PageProjectResponse
666+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
667+ return nil , fmt .Errorf ("error decoding projects response: %v" , err )
668+ }
669+ return & result , nil
670+ }
671+
672+ func (c * Client ) GetProjectStatistics (ctx context.Context , nameOrID string ) (* ProjectStatistics , error ) {
673+ endpoint := fmt .Sprintf ("/api/v1/projects/%s/statistics" , nameOrID )
674+ resp , status , err := c .doRequest (ctx , "GET" , endpoint , nil )
675+ if err != nil {
676+ if status == 404 {
677+ return nil , fmt .Errorf ("404" )
678+ }
679+ return nil , err
680+ }
681+ defer resp .Body .Close ()
682+
683+ var result ProjectStatistics
684+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
685+ return nil , fmt .Errorf ("error decoding project statistics response: %v" , err )
686+ }
687+ return & result , nil
688+ }
0 commit comments