Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add video tags endpoint #89

Merged
merged 1 commit into from
Oct 2, 2024
Merged
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
6 changes: 6 additions & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Sources/APIs/CaptionsAPI.swift
Sources/APIs/ChaptersAPI.swift
Sources/APIs/LiveStreamsAPI.swift
Sources/APIs/PlayerThemesAPI.swift
Sources/APIs/TagsAPI.swift
Sources/APIs/UploadTokensAPI.swift
Sources/APIs/VideosAPI.swift
Sources/APIs/WatermarksAPI.swift
Expand Down Expand Up @@ -52,6 +53,8 @@ Sources/Models/FilterBy.swift
Sources/Models/FilterBy1.swift
Sources/Models/FilterBy2.swift
Sources/Models/Link.swift
Sources/Models/ListTagsResponse.swift
Sources/Models/ListTagsResponseData.swift
Sources/Models/LiveStream.swift
Sources/Models/LiveStreamAssets.swift
Sources/Models/LiveStreamCreationPayload.swift
Expand Down Expand Up @@ -136,6 +139,8 @@ docs/FilterBy.md
docs/FilterBy1.md
docs/FilterBy2.md
docs/Link.md
docs/ListTagsResponse.md
docs/ListTagsResponseData.md
docs/LiveStream.md
docs/LiveStreamAssets.md
docs/LiveStreamCreationPayload.md
Expand All @@ -158,6 +163,7 @@ docs/Quality.md
docs/RefreshTokenPayload.md
docs/RestreamsRequestObject.md
docs/RestreamsResponseObject.md
docs/TagsAPI.md
docs/TokenCreationPayload.md
docs/TokenListResponse.md
docs/TooManyRequests.md
Expand Down
2 changes: 1 addition & 1 deletion .openapi-generator/oas_apivideo.yaml-defaut-cli.sha256
Original file line number Diff line number Diff line change
@@ -1 +1 @@
17ac0a7b292afb851962592fd7280e7727bb901d5d4e2a3f75808aa76a1ecdf5
49fece4f39cb92341dc77e0eb7371a152903bf6aebcfa250d289efc9018b0f72
4 changes: 2 additions & 2 deletions ApiVideoClient.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Pod::Spec.new do |s|
s.tvos.deployment_target = '10.0'
# Add back when CocoaPods/CocoaPods#11558 is released
#s.watchos.deployment_target = '3.0'
s.version = '1.3.2'
s.source = { :git => 'https://github.com/apivideo/api.video-swift-client', :tag => 'v1.3.2' }
s.version = '1.3.3'
s.source = { :git => 'https://github.com/apivideo/api.video-swift-client', :tag => 'v1.3.3' }
s.authors = { 'Ecosystem Team' => '[email protected]' }
s.license = { :type => 'MIT' }
s.homepage = 'https://docs.api.video'
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Changelog
All changes to this project will be documented in this file.

## [1.3.3] - 2024-09-30
- Add /tags API endpoint

## [1.3.2] - 2024-09-16
- Add discarded video endpoints

Expand Down
22 changes: 20 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
- [ChaptersAPI](#ChaptersAPI)
- [LiveStreamsAPI](#LiveStreamsAPI)
- [PlayerThemesAPI](#PlayerThemesAPI)
- [TagsAPI](#TagsAPI)
- [UploadTokensAPI](#UploadTokensAPI)
- [VideosAPI](#VideosAPI)
- [WatermarksAPI](#WatermarksAPI)
Expand Down Expand Up @@ -55,14 +56,14 @@ api.video's Swift API client for iOS, macOS and tvOS streamlines the coding proc
Specify it in your `Cartfile`:

```
github "apivideo/api.video-swift-client" ~> 1.3.2
github "apivideo/api.video-swift-client" ~> 1.3.3
```

Run `carthage update`

#### CocoaPods

Add `pod 'ApiVideoClient', '1.3.2'` in your `Podfile`
Add `pod 'ApiVideoClient', '1.3.3'` in your `Podfile`

Run `pod install`

Expand Down Expand Up @@ -189,6 +190,21 @@ Method | HTTP request | Description
[**deleteLogo**](https://github.com/apivideo/api.video-swift-client/blob/main/docs/PlayerThemesAPI.md#deleteLogo) | **DELETE** `/players/{playerId}/logo` | Delete logo


#### TagsAPI

##### Retrieve an instance of TagsAPI:

```swift
TagsAPI
```

##### Endpoints

Method | HTTP request | Description
------------- | ------------- | -------------
[**list**](https://github.com/apivideo/api.video-swift-client/blob/main/docs/TagsAPI.md#list) | **GET** `/tags` | List all video tags


#### UploadTokensAPI

##### Retrieve an instance of UploadTokensAPI:
Expand Down Expand Up @@ -299,6 +315,8 @@ Method | HTTP request | Description
- [FilterBy1](https://github.com/apivideo/api.video-swift-client/blob/main/docs/FilterBy1.md)
- [FilterBy2](https://github.com/apivideo/api.video-swift-client/blob/main/docs/FilterBy2.md)
- [Link](https://github.com/apivideo/api.video-swift-client/blob/main/docs/Link.md)
- [ListTagsResponse](https://github.com/apivideo/api.video-swift-client/blob/main/docs/ListTagsResponse.md)
- [ListTagsResponseData](https://github.com/apivideo/api.video-swift-client/blob/main/docs/ListTagsResponseData.md)
- [LiveStream](https://github.com/apivideo/api.video-swift-client/blob/main/docs/LiveStream.md)
- [LiveStreamAssets](https://github.com/apivideo/api.video-swift-client/blob/main/docs/LiveStreamAssets.md)
- [LiveStreamCreationPayload](https://github.com/apivideo/api.video-swift-client/blob/main/docs/LiveStreamCreationPayload.md)
Expand Down
2 changes: 1 addition & 1 deletion Sources/APIs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import Foundation
public class ApiVideoClient {
public static var apiKey: String? = nil
public static var basePath = "https://ws.api.video"
internal static var customHeaders:[String: String] = ["AV-Origin-Client": "swift:1.3.2"]
internal static var customHeaders:[String: String] = ["AV-Origin-Client": "swift:1.3.3"]
private static var chunkSize: Int = 50 * 1024 * 1024
internal static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory()
internal static var credential = ApiVideoCredential()
Expand Down
109 changes: 109 additions & 0 deletions Sources/APIs/TagsAPI.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
//
// TagsAPI.swift
//
// Generated by openapi-generator
// https://openapi-generator.tech
//

import Foundation
#if canImport(AnyCodable)
import AnyCodable
#endif

open class TagsAPI {

/**
* enum for parameter sortBy
*/
public enum SortByList: String, CaseIterable {
case value = "value"
case videocount = "videoCount"
}

/**
* enum for parameter sortOrder
*/
public enum SortOrderList: String, CaseIterable {
case asc = "asc"
case desc = "desc"
}

/**
List all video tags

- parameter value: (query) Use this parameter to search for specific video tags. The API filters results even on partial values, and ignores accents, uppercase, and lowercase. (optional)
- parameter sortBy: (query) Use this parameter to choose which field the API will use to sort the response data. The default is `value`. These are the available fields to sort by: - `value`: Sorts the results based on tag values in alphabetic order. - `videoCount`: Sorts the results based on the number of times a video tag is used. (optional)
- parameter sortOrder: (query) Use this parameter to sort results. `asc` is ascending and sorts from A to Z. `desc` is descending and sorts from Z to A. (optional)
- parameter currentPage: (query) Choose the number of search results to return per page. Minimum value: 1 (optional, default to 1)
- parameter pageSize: (query) Results per page. Allowed values 1-100, default is 25. (optional, default to 25)
- parameter apiResponseQueue: The queue on which api response is dispatched.
- parameter completion: completion handler to receive the data and the error objects.
*/
@discardableResult
open class func list(value: String? = nil, sortBy: SortByList? = nil, sortOrder: SortOrderList? = nil, currentPage: Int? = nil, pageSize: Int? = nil, apiResponseQueue: DispatchQueue = ApiVideoClient.apiResponseQueue, completion: @escaping ((_ data: ListTagsResponse?, _ error: Error?) -> Void)) -> RequestTask {
return list(value: value, sortBy: sortBy, sortOrder: sortOrder, currentPage: currentPage, pageSize: pageSize, apiResponseQueue: apiResponseQueue) { result in
switch result {
case let .success(response):
completion(response.body, nil)
case let .failure(error):
completion(nil, error)
}
}
}

/**
List all video tags

- parameter value: (query) Use this parameter to search for specific video tags. The API filters results even on partial values, and ignores accents, uppercase, and lowercase. (optional)
- parameter sortBy: (query) Use this parameter to choose which field the API will use to sort the response data. The default is `value`. These are the available fields to sort by: - `value`: Sorts the results based on tag values in alphabetic order. - `videoCount`: Sorts the results based on the number of times a video tag is used. (optional)
- parameter sortOrder: (query) Use this parameter to sort results. `asc` is ascending and sorts from A to Z. `desc` is descending and sorts from Z to A. (optional)
- parameter currentPage: (query) Choose the number of search results to return per page. Minimum value: 1 (optional, default to 1)
- parameter pageSize: (query) Results per page. Allowed values 1-100, default is 25. (optional, default to 25)
- parameter apiResponseQueue: The queue on which api response is dispatched.
- parameter completion: completion handler to receive the result of the request (incl. headers).
*/
@discardableResult
open class func list(value: String? = nil, sortBy: SortByList? = nil, sortOrder: SortOrderList? = nil, currentPage: Int? = nil, pageSize: Int? = nil, apiResponseQueue: DispatchQueue = ApiVideoClient.apiResponseQueue, completion: @escaping (_ result: Swift.Result<Response<ListTagsResponse>, ErrorResponse>) -> Void) -> RequestTask {
return listWithRequestBuilder(value: value, sortBy: sortBy, sortOrder: sortOrder, currentPage: currentPage, pageSize: pageSize).execute(apiResponseQueue, completion)
}


/**
List all video tags
- GET /tags
- This endpoint enables you to search for video tags in a project and see how many videos are tagged with them. If you do not define any query parameters, the endpoint lists all video tags and the numbers of times they are used in a project.
- responseHeaders: [X-RateLimit-Limit(Int), X-RateLimit-Remaining(Int), X-RateLimit-Retry-After(Int)]
- parameter value: (query) Use this parameter to search for specific video tags. The API filters results even on partial values, and ignores accents, uppercase, and lowercase. (optional)
- parameter sortBy: (query) Use this parameter to choose which field the API will use to sort the response data. The default is &#x60;value&#x60;. These are the available fields to sort by: - &#x60;value&#x60;: Sorts the results based on tag values in alphabetic order. - &#x60;videoCount&#x60;: Sorts the results based on the number of times a video tag is used. (optional)
- parameter sortOrder: (query) Use this parameter to sort results. &#x60;asc&#x60; is ascending and sorts from A to Z. &#x60;desc&#x60; is descending and sorts from Z to A. (optional)
- parameter currentPage: (query) Choose the number of search results to return per page. Minimum value: 1 (optional, default to 1)
- parameter pageSize: (query) Results per page. Allowed values 1-100, default is 25. (optional, default to 25)
- returns: RequestBuilder<ListTagsResponse>
*/
internal class func listWithRequestBuilder(value: String? = nil, sortBy: SortByList? = nil, sortOrder: SortOrderList? = nil, currentPage: Int? = nil, pageSize: Int? = nil) -> RequestBuilder<ListTagsResponse> {
let localVariablePath = "/tags"
let localVariableURLString = ApiVideoClient.basePath + localVariablePath
let localVariableParameters: [String: Any]? = nil

var localVariableUrlComponents = URLComponents(string: localVariableURLString)
localVariableUrlComponents?.queryItems = APIHelper.mapValuesToQueryItems([
"value": value?.encodeToJSON(),
"sortBy": sortBy?.encodeToJSON(),
"sortOrder": sortOrder?.encodeToJSON(),
"currentPage": currentPage?.encodeToJSON(),
"pageSize": pageSize?.encodeToJSON(),
])


let localVariableNillableHeaders: [String: Any?] = [
:
]

let localVariableHeaderParameters = APIHelper.rejectNilHeaders(localVariableNillableHeaders)

let localVariableRequestBuilder: RequestBuilder<ListTagsResponse>.Type = ApiVideoClient.requestBuilderFactory.getBuilder()

return localVariableRequestBuilder.init(method: "GET", URLString: (localVariableUrlComponents?.string ?? localVariableURLString), parameters: localVariableParameters, headers: localVariableHeaderParameters)
}

}
36 changes: 36 additions & 0 deletions Sources/Models/ListTagsResponse.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//
// ListTagsResponse.swift
//
// Generated by openapi-generator
// https://openapi-generator.tech
//

import Foundation
#if canImport(AnyCodable)
import AnyCodable
#endif

public struct ListTagsResponse: Codable, Hashable {

public var data: [ListTagsResponseData]?
public var pagination: Pagination?

public init(data: [ListTagsResponseData]? = nil, pagination: Pagination? = nil) {
self.data = data
self.pagination = pagination
}

public enum CodingKeys: String, CodingKey, CaseIterable {
case data
case pagination
}

// Encodable protocol methods

public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(data, forKey: .data)
try container.encodeIfPresent(pagination, forKey: .pagination)
}
}

38 changes: 38 additions & 0 deletions Sources/Models/ListTagsResponseData.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// ListTagsResponseData.swift
//
// Generated by openapi-generator
// https://openapi-generator.tech
//

import Foundation
#if canImport(AnyCodable)
import AnyCodable
#endif

public struct ListTagsResponseData: Codable, Hashable {

/** Returns the value of a video tag used in your project. */
public var value: String?
/** Returns the number of times a video tag is used. */
public var videoCount: Int?

public init(value: String? = nil, videoCount: Int? = nil) {
self.value = value
self.videoCount = videoCount
}

public enum CodingKeys: String, CodingKey, CaseIterable {
case value
case videoCount
}

// Encodable protocol methods

public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(value, forKey: .value)
try container.encodeIfPresent(videoCount, forKey: .videoCount)
}
}

15 changes: 10 additions & 5 deletions Sources/Models/Webhook.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,31 @@ import AnyCodable

public struct Webhook: Codable, Hashable {

/** Unique identifier of the webhook */
/** A unique identifier of the webhook you subscribed to. */
public var webhookId: String?
/** When an webhook was created, presented in ATOM UTC format. */
/** The time and date when you created this webhook subscription, in ATOM UTC format. */
public var createdAt: Date?
/** A list of events that will trigger the webhook. */
/** A list of events that you subscribed to. When these events occur, the API triggers a webhook call to the URL you provided. */
public var events: [String]?
/** URL of the webhook */
/** The URL where the API sends the webhook. */
public var url: String?
/** A secret key for the webhook you subscribed to. You can use it to verify the origin of the webhook call that you receive. */
public var signatureSecret: String?

public init(webhookId: String? = nil, createdAt: Date? = nil, events: [String]? = nil, url: String? = nil) {
public init(webhookId: String? = nil, createdAt: Date? = nil, events: [String]? = nil, url: String? = nil, signatureSecret: String? = nil) {
self.webhookId = webhookId
self.createdAt = createdAt
self.events = events
self.url = url
self.signatureSecret = signatureSecret
}

public enum CodingKeys: String, CodingKey, CaseIterable {
case webhookId
case createdAt
case events
case url
case signatureSecret
}

// Encodable protocol methods
Expand All @@ -43,6 +47,7 @@ public struct Webhook: Codable, Hashable {
try container.encodeIfPresent(createdAt, forKey: .createdAt)
try container.encodeIfPresent(events, forKey: .events)
try container.encodeIfPresent(url, forKey: .url)
try container.encodeIfPresent(signatureSecret, forKey: .signatureSecret)
}
}

26 changes: 26 additions & 0 deletions Tests/TestResources/payloads/tags/list/responses/200.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"data" : [ {
"value" : "maths",
"videoCount" : "33"
}, {
"value" : "tutorials",
"videoCount" : "10"
} ],
"pagination" : {
"currentPage" : 1,
"pageSize" : 25,
"pagesTotal" : 1,
"itemsTotal" : 2,
"currentPageItems" : 2,
"links" : [ {
"rel" : "self",
"uri" : "/tags?currentPage=1&pageSize=25"
}, {
"rel" : "first",
"uri" : "/tags?currentPage=1&pageSize=25"
}, {
"rel" : "last",
"uri" : "/tags?currentPage=1&pageSize=25"
} ]
}
}
5 changes: 5 additions & 0 deletions Tests/TestResources/payloads/tags/list/responses/429.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type" : "https://docs.api.video/reference/too-many-requests",
"title" : "Too many requests.",
"status" : 429
}
Loading
Loading