Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions crowdin/crowdin.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ type Client struct {
SourceStrings *SourceStringsService
Storages *StorageService
StringComments *StringCommentsService
StringCorrections *StringCorrectionsService
StringTranslations *StringTranslationsService
Tasks *TasksService
Teams *TeamsService
Expand Down Expand Up @@ -119,6 +120,7 @@ func NewClient(token string, opts ...ClientOption) (*Client, error) {
c.SourceStrings = &SourceStringsService{client: c}
c.Storages = &StorageService{client: c}
c.StringComments = &StringCommentsService{client: c}
c.StringCorrections = &StringCorrectionsService{client: c}
c.StringTranslations = &StringTranslationsService{client: c}
c.Tasks = &TasksService{client: c}
c.Teams = &TeamsService{client: c}
Expand Down
108 changes: 108 additions & 0 deletions crowdin/model/string_corrections.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package model

import (
"errors"
"fmt"
"net/url"
)

type StringCorrection struct {
ID int `json:"id"`
Text string `json:"text"`
PluralCategoryName *string `json:"pluralCategoryName,omitempty"`
User *User `json:"user,omitempty"`
CreatedAt string `json:"createdAt"`
}

type StringCorrectionGetResponse struct {
Data *StringCorrection `json:"data"`
}

type StringCorrectionsListResponse struct {
Data []*StringCorrectionResponse `json:"data"`
Pagination *Pagination `json:"pagination,omitempty"`
}

type StringCorrectionResponse struct {
Data *StringCorrection `json:"data"`
}

type StringCorrectionsListOptions struct {
StringID int `json:"stringId,omitempty"`
Limit int `json:"limit,omitempty"`
Offset int `json:"offset,omitempty"`
OrderBy string `json:"orderBy,omitempty"`
DenormalizePlaceholders *int `json:"denormalizePlaceholders,omitempty"`
}

type StringCorrectionGetOptions struct {
DenormalizePlaceholders *int `json:"denormalizePlaceholders,omitempty"`
}

type StringCorrectionAddRequest struct {
StringID int `json:"stringId"`
Text string `json:"text"`
PluralCategoryName *string `json:"pluralCategoryName,omitempty"`
}

type StringCorrectionsDeleteOptions struct {
StringID int `json:"stringId"`
}

func (o *StringCorrectionsListOptions) Values() (url.Values, bool) {
v := url.Values{}
if o == nil {
return v, false
}
if o.StringID > 0 {
v.Set("stringId", fmt.Sprintf("%d", o.StringID))
}
if o.Limit > 0 {
v.Set("limit", fmt.Sprintf("%d", o.Limit))
}
if o.Offset > 0 {
v.Set("offset", fmt.Sprintf("%d", o.Offset))
}
if o.OrderBy != "" {
v.Set("orderBy", o.OrderBy)
}
if o.DenormalizePlaceholders != nil {
v.Set("denormalizePlaceholders", fmt.Sprintf("%d", *o.DenormalizePlaceholders))
}
return v, len(v) > 0
}

func (o *StringCorrectionGetOptions) Values() (url.Values, bool) {
v := url.Values{}
if o == nil {
return v, false
}
if o.DenormalizePlaceholders != nil {
v.Set("denormalizePlaceholders", fmt.Sprintf("%d", *o.DenormalizePlaceholders))
}
return v, len(v) > 0
}

func (o *StringCorrectionsDeleteOptions) Values() (url.Values, bool) {
v := url.Values{}
if o == nil {
return v, false
}
if o.StringID > 0 {
v.Set("stringId", fmt.Sprintf("%d", o.StringID))
}
return v, len(v) > 0
}

func (r *StringCorrectionAddRequest) Validate() error {
if r == nil {
return ErrNilRequest
}
if r.StringID == 0 {
return errors.New("stringId is required")
}
if r.Text == "" {
return errors.New("text is required")
}
return nil
}
71 changes: 71 additions & 0 deletions crowdin/string_corrections.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package crowdin

import (
"context"
"fmt"

"github.com/crowdin/crowdin-api-client-go/crowdin/model"
)

// https://developer.crowdin.com/api/v2/#tag/String-Corrections
type StringCorrectionsService struct {
client *Client
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.getMany
func (s *StringCorrectionsService) ListCorrections(ctx context.Context, projectID int, opts *model.StringCorrectionsListOptions) (
[]*model.StringCorrection, *Response, error,
) {
res := new(model.StringCorrectionsListResponse)
resp, err := s.client.Get(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections", projectID), opts, res)
if err != nil {
return nil, resp, err
}

list := make([]*model.StringCorrection, 0, len(res.Data))
for _, correction := range res.Data {
list = append(list, correction.Data)
}

return list, resp, nil
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.get
func (s *StringCorrectionsService) GetCorrection(ctx context.Context, projectID, correctionID int, opts *model.StringCorrectionGetOptions) (
*model.StringCorrection, *Response, error,
) {
res := new(model.StringCorrectionGetResponse)
resp, err := s.client.Get(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections/%d", projectID, correctionID), opts, res)

return res.Data, resp, err
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.post
func (s *StringCorrectionsService) AddCorrection(ctx context.Context, projectID int, req *model.StringCorrectionAddRequest) (
*model.StringCorrection, *Response, error,
) {
res := new(model.StringCorrectionGetResponse)
resp, err := s.client.Post(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections", projectID), req, res)

return res.Data, resp, err
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.deleteMany
func (s *StringCorrectionsService) DeleteCorrections(ctx context.Context, projectID int, opts *model.StringCorrectionsDeleteOptions) (*Response, error) {
return s.client.Delete(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections", projectID), opts)
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.put
func (s *StringCorrectionsService) RestoreCorrection(ctx context.Context, projectID, correctionID int) (
*model.StringCorrection, *Response, error,
) {
res := new(model.StringCorrectionGetResponse)
resp, err := s.client.Put(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections/%d", projectID, correctionID), nil, res)

return res.Data, resp, err
}

// https://developer.crowdin.com/api/v2/#operation/api.projects.strings.corrections.delete
func (s *StringCorrectionsService) DeleteCorrection(ctx context.Context, projectID, correctionID int) (*Response, error) {
return s.client.Delete(ctx, fmt.Sprintf("/api/v2/projects/%d/strings/corrections/%d", projectID, correctionID), nil)
}
Loading