mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-11-27 06:40:32 +00:00
fc3741365c
* Add Swagger spec test script * Fix Swagger spec errors not related to statuses with polls * Add API tests that post a status with a poll * Fix creating a status with a poll from form params * Fix Swagger spec errors related to statuses with polls (this is the last error) * Fix Swagger spec warnings not related to unused definitions * Suppress a duplicate list update params definition that was somehow causing wrong param names * Add Swagger test to CI - updates Drone config - vendorizes go-swagger - fixes a file extension issue that caused the test script to generate JSON instead of YAML with the vendorized version * Put `Sample: ` on its own line everywhere * Remove unused id param from emojiCategoriesGet * Add 5 more pairs of profile fields to account update API Swagger * Remove Swagger prefix from dummy fields It makes the generated code look weird * Manually annotate params for statusCreate operation * Fix all remaining Swagger spec warnings - Change some models into operation parameters - Ignore models that already correspond to manually documented operation parameters but can't be trivially changed (those with file fields) * Documented that creating a status with scheduled_at isn't implemented yet * sign drone.yml * Fix filter API Swagger errors * fixup! Fix filter API Swagger errors --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
// GoToSocial
|
|
// Copyright (C) GoToSocial Authors admin@gotosocial.org
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
package model
|
|
|
|
// MultiStatus models a multistatus HTTP response body.
|
|
// This model should be transmitted along with http code
|
|
// 207 MULTI-STATUS to indicate a mixture of responses.
|
|
// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/207
|
|
//
|
|
// TODO: swagger:model multiStatus once domain permissions API supports HTTP 207
|
|
type MultiStatus struct {
|
|
Data []MultiStatusEntry `json:"data"`
|
|
Metadata MultiStatusMetadata `json:"metadata"`
|
|
}
|
|
|
|
// MultiStatusEntry models one entry in multistatus data.
|
|
// It can model either a success or a failure. The type
|
|
// and value of `Resource` is left to the discretion of
|
|
// the caller, but at minimum it should be expected to be
|
|
// JSON-serializable.
|
|
//
|
|
// TODO: swagger:model multiStatusEntry once domain permissions API supports HTTP 207
|
|
type MultiStatusEntry struct {
|
|
// The resource/result for this entry.
|
|
// Value may be any type, check the docs
|
|
// per endpoint to see which to expect.
|
|
Resource any `json:"resource"`
|
|
// Message/error message for this entry.
|
|
Message string `json:"message"`
|
|
// HTTP status code of this entry.
|
|
Status int `json:"status"`
|
|
}
|
|
|
|
// MultiStatusMetadata models an at-a-glance summary of
|
|
// the data contained in the MultiStatus.
|
|
//
|
|
// TODO: swagger:model multiStatusMetadata once domain permissions API supports HTTP 207
|
|
type MultiStatusMetadata struct {
|
|
// Success count + failure count.
|
|
Total int `json:"total"`
|
|
// Count of successful results (2xx).
|
|
Success int `json:"success"`
|
|
// Count of unsuccessful results (!2xx).
|
|
Failure int `json:"failure"`
|
|
}
|
|
|
|
// NewMultiStatus returns a new MultiStatus API model with
|
|
// the provided entries, which will be iterated through to
|
|
// look for 2xx and non 2xx status codes, in order to count
|
|
// successes and failures.
|
|
func NewMultiStatus(entries []MultiStatusEntry) *MultiStatus {
|
|
var (
|
|
successCount int
|
|
failureCount int
|
|
total = len(entries)
|
|
)
|
|
|
|
for _, e := range entries {
|
|
// Outside 2xx range = failure.
|
|
if e.Status > 299 || e.Status < 200 {
|
|
failureCount++
|
|
} else {
|
|
successCount++
|
|
}
|
|
}
|
|
|
|
return &MultiStatus{
|
|
Data: entries,
|
|
Metadata: MultiStatusMetadata{
|
|
Total: total,
|
|
Success: successCount,
|
|
Failure: failureCount,
|
|
},
|
|
}
|
|
}
|