Skip to content

Commit

Permalink
Add video tags endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
olivierapivideo authored Sep 27, 2024
1 parent b716f83 commit 350f38d
Show file tree
Hide file tree
Showing 15 changed files with 339 additions and 7 deletions.
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
3fd917525a7ff151e1d54f6eb1cced24739639393e8718ebf6da4058a67d8131
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' => 'ecosystem@api.video' }
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)
}
}

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" : "https://ws.api.video/watermarks?currentPage=1"
}, {
"rel" : "first",
"uri" : "https://ws.api.video/watermarks?currentPage=1"
}, {
"rel" : "last",
"uri" : "https://ws.api.video/watermarks?currentPage=1"
} ]
}
}
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
}
11 changes: 11 additions & 0 deletions docs/ListTagsResponse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# ListTagsResponse

## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**data** | [ListTagsResponseData] | | [optional]
**pagination** | [**Pagination**](Pagination.md) | | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


11 changes: 11 additions & 0 deletions docs/ListTagsResponseData.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# ListTagsResponseData

## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**value** | **String** | Returns the value of a video tag used in your project. | [optional]
**videoCount** | **Int** | Returns the number of times a video tag is used. | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Loading

0 comments on commit 350f38d

Please sign in to comment.