feat: translation flows, revision conflicts, delete scopes, article moves and a target site for new articles
This commit is contained in:
1 parent
339e646eb8
commit
45fbbc33b1
93 files changed
+7630
-294
No files matched your search
@@ -42,6 +42,7 @@ type PostArticle struct {
|
||||
StoryID *uint32 `json:"story_id" validate:"omitempty,gte=1"`
|
||||
SourceArticleID *uint32 `json:"source_article_id" validate:"omitempty,gte=1"`
|
||||
Copy *bool `json:"copy"`
|
||||
Site *string `json:"site" validate:"omitempty,sitekey"`
|
||||
}
|
||||
|
||||
type PostTranslation struct {
|
||||
@@ -237,11 +238,15 @@ func (h *Handler) PostArticle(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
if err := validator.Validate.Struct(localArticle); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
writeValidationError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if localArticle.StoryID != nil {
|
||||
if localArticle.Site != nil {
|
||||
http.Error(w, apperr.BodyErrorMessage, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
h.postTranslation(w, r, format, localArticle)
|
||||
return
|
||||
}
|
||||
@@ -259,6 +264,7 @@ func (h *Handler) PostArticle(w http.ResponseWriter, r *http.Request) {
|
||||
Body: localArticle.Body,
|
||||
Format: format,
|
||||
Lang: lang,
|
||||
Site: localArticle.Site,
|
||||
Caller: access.CallerOf(r),
|
||||
})
|
||||
if err != nil {
|
||||
@@ -336,6 +342,8 @@ func writeKnownArticleError(w http.ResponseWriter, err error) bool {
|
||||
return access.WriteIfMissingPermission(w, err) || articleerr.Write(w, err)
|
||||
}
|
||||
|
||||
const siteField = "Site"
|
||||
|
||||
var bodyMismatchFailures = map[string]string{
|
||||
"Copy": "required",
|
||||
"IfRevision": "min",
|
||||
@@ -351,6 +359,12 @@ func writeValidationError(w http.ResponseWriter, err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, failure := range failures {
|
||||
if failure.Field() == siteField {
|
||||
http.Error(w, apperr.InvalidSiteKeyErrorMessage, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
if len(failures) > 0 && bodyMismatchFailures[failures[0].Field()] == failures[0].Tag() {
|
||||
http.Error(w, apperr.BodyErrorMessage, http.StatusBadRequest)
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user