From 592a21fb9da4cecda08a07b0595ad7718ee8d26a Mon Sep 17 00:00:00 2001 From: Gianpiero Date: Fri, 1 Oct 2021 18:30:26 +0200 Subject: [PATCH] Added members endpoints --- .../LetterboxdAPI/LetterboxdAPI+Member.swift | 44 +++++++++++++++++++ .../Models/{ => Film}/Film.swift | 0 .../Models/{ => Film}/FilmAvailability.swift | 0 .../Models/{ => Film}/FilmContributions.swift | 0 .../Models/{ => Film}/FilmIdentifier.swift | 0 .../Models/{ => Film}/FilmStatistics.swift | 0 .../{ => Film}/FilmStatisticsCount.swift | 0 .../Models/{ => Film}/FilmTrailer.swift | 0 .../Models/{ => Film}/FilmsSummary.swift | 0 .../LetterboxdAPI/Models/Member/Member.swift | 24 ++++++++++ .../Models/Member/MemberStatistics.swift | 21 +++++++++ .../Models/{ => Member}/MemberSummary.swift | 0 ...FilmResponse.swift => FilmsResponse.swift} | 0 13 files changed, 89 insertions(+) create mode 100644 Sources/LetterboxdAPI/LetterboxdAPI+Member.swift rename Sources/LetterboxdAPI/Models/{ => Film}/Film.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmAvailability.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmContributions.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmIdentifier.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmStatistics.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmStatisticsCount.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmTrailer.swift (100%) rename Sources/LetterboxdAPI/Models/{ => Film}/FilmsSummary.swift (100%) create mode 100644 Sources/LetterboxdAPI/Models/Member/Member.swift create mode 100644 Sources/LetterboxdAPI/Models/Member/MemberStatistics.swift rename Sources/LetterboxdAPI/Models/{ => Member}/MemberSummary.swift (100%) rename Sources/LetterboxdAPI/Models/Responses/{FilmResponse.swift => FilmsResponse.swift} (100%) diff --git a/Sources/LetterboxdAPI/LetterboxdAPI+Member.swift b/Sources/LetterboxdAPI/LetterboxdAPI+Member.swift new file mode 100644 index 0000000..6a193d8 --- /dev/null +++ b/Sources/LetterboxdAPI/LetterboxdAPI+Member.swift @@ -0,0 +1,44 @@ +// +// LetterboxdAPI+Member.swift +// LetterboxdAPI +// +// Created by Gianpiero Spinelli. +// + +import Foundation + +public extension LetterboxdAPI { + func getMember(withID id: String, completion: @escaping (Result) -> Void) { + let url = URLBuilder.url(path: "/member/\(id)", body: nil) + + guard let request = generateRequest(url: url, method: .get) else { + completion(.failure(LetterboxdAPIError.generatingRequest)) + return + } + + processRequest(request: request, completion: completion) + } + + func getMemberStatistics(withID id: String, completion: @escaping (Result) -> Void) { + let url = URLBuilder.url(path: "/member/\(id)/statistics", body: nil) + + guard let request = generateRequest(url: url, method: .get) else { + completion(.failure(LetterboxdAPIError.generatingRequest)) + return + } + + processRequest(request: request, completion: completion) + } + + /// Get details of a member’s public watchlist by ID. + func getMemberWatchlist(withID id: String, parameters: [String: String] = [:], completion: @escaping (Result) -> Void) { + let url = URLBuilder.url(path: "/member/\(id)/watchlist", body: nil, params: parameters) + + guard let request = generateRequest(url: url, method: .get) else { + completion(.failure(LetterboxdAPIError.generatingRequest)) + return + } + + processRequest(request: request, completion: completion) + } +} diff --git a/Sources/LetterboxdAPI/Models/Film.swift b/Sources/LetterboxdAPI/Models/Film/Film.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/Film.swift rename to Sources/LetterboxdAPI/Models/Film/Film.swift diff --git a/Sources/LetterboxdAPI/Models/FilmAvailability.swift b/Sources/LetterboxdAPI/Models/Film/FilmAvailability.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmAvailability.swift rename to Sources/LetterboxdAPI/Models/Film/FilmAvailability.swift diff --git a/Sources/LetterboxdAPI/Models/FilmContributions.swift b/Sources/LetterboxdAPI/Models/Film/FilmContributions.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmContributions.swift rename to Sources/LetterboxdAPI/Models/Film/FilmContributions.swift diff --git a/Sources/LetterboxdAPI/Models/FilmIdentifier.swift b/Sources/LetterboxdAPI/Models/Film/FilmIdentifier.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmIdentifier.swift rename to Sources/LetterboxdAPI/Models/Film/FilmIdentifier.swift diff --git a/Sources/LetterboxdAPI/Models/FilmStatistics.swift b/Sources/LetterboxdAPI/Models/Film/FilmStatistics.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmStatistics.swift rename to Sources/LetterboxdAPI/Models/Film/FilmStatistics.swift diff --git a/Sources/LetterboxdAPI/Models/FilmStatisticsCount.swift b/Sources/LetterboxdAPI/Models/Film/FilmStatisticsCount.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmStatisticsCount.swift rename to Sources/LetterboxdAPI/Models/Film/FilmStatisticsCount.swift diff --git a/Sources/LetterboxdAPI/Models/FilmTrailer.swift b/Sources/LetterboxdAPI/Models/Film/FilmTrailer.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmTrailer.swift rename to Sources/LetterboxdAPI/Models/Film/FilmTrailer.swift diff --git a/Sources/LetterboxdAPI/Models/FilmsSummary.swift b/Sources/LetterboxdAPI/Models/Film/FilmsSummary.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/FilmsSummary.swift rename to Sources/LetterboxdAPI/Models/Film/FilmsSummary.swift diff --git a/Sources/LetterboxdAPI/Models/Member/Member.swift b/Sources/LetterboxdAPI/Models/Member/Member.swift new file mode 100644 index 0000000..74da2b8 --- /dev/null +++ b/Sources/LetterboxdAPI/Models/Member/Member.swift @@ -0,0 +1,24 @@ +// +// Member.swift +// LetterboxdAPI +// +// Created by Gianpiero Spinelli. +// + +import Foundation + +public struct Member: Decodable { + public var id: String + public var username: String + public var givenName: String? + public var familyName: String? + public var displayName: String? + public var shortName: String? + public var avatar: Image? + + /// Can be one of `Crew`, `Alum`, `Hq`, `Patron`, `Pro`, `Member` + public var memberStatus: String + public var hideAdsInContent: Bool + public var favoriteFilms: [Film]? + public var backdrop: Image? +} diff --git a/Sources/LetterboxdAPI/Models/Member/MemberStatistics.swift b/Sources/LetterboxdAPI/Models/Member/MemberStatistics.swift new file mode 100644 index 0000000..27aba8d --- /dev/null +++ b/Sources/LetterboxdAPI/Models/Member/MemberStatistics.swift @@ -0,0 +1,21 @@ +// +// MemberStatistics.swift +// LetterboxdAPI +// +// Created by Gianpiero Spinelli. +// + +import Foundation + +public typealias MemberIdentifier = FilmIdentifier + +public struct MemberStatistics: Decodable { + public var member: MemberIdentifier + public var counts: MemberStatisticsCounts + public var yearsInReview: [Int]? +} + +public struct MemberStatisticsCounts: Decodable { + public var watches: Int + public var filmsInDiaryThisYear: Int +} diff --git a/Sources/LetterboxdAPI/Models/MemberSummary.swift b/Sources/LetterboxdAPI/Models/Member/MemberSummary.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/MemberSummary.swift rename to Sources/LetterboxdAPI/Models/Member/MemberSummary.swift diff --git a/Sources/LetterboxdAPI/Models/Responses/FilmResponse.swift b/Sources/LetterboxdAPI/Models/Responses/FilmsResponse.swift similarity index 100% rename from Sources/LetterboxdAPI/Models/Responses/FilmResponse.swift rename to Sources/LetterboxdAPI/Models/Responses/FilmsResponse.swift