| POST | /share/share-ad-message-link-used | A share AD Message link was used | Validates the JWT token with the identity of the sharing user and the shared AD Message and returns relevant information. |
|---|
import Foundation
import ServiceStack
public class ShareAdMessageLinkUsedRequest : IPost, Codable
{
public var shareAdMessageToken:String
public var locale:Locale?
required public init(){}
}
public enum Locale : String, Codable
{
case EnUs
case NbNo
}
public class ShareAdMessageLinkUsedResponse : Codable
{
public var user:SharingUser
public var adMessage:AdMessageDto
public var place:PlaceBasicApiDto
public var state:SharingState
required public init(){}
}
public class SharingUser : Codable
{
public var firstName:String
public var lastName:String
public var profilePhotoUrl:String
required public init(){}
}
public class AdMessageDto : Codable
{
public var id:Int
public var guid:String
public var title:String
public var startAt:Date
public var stopAt:Date
public var publishAt:Date
public var imageUrls:[ImageUrls] = []
public var place:PlaceBasicApiDto
public var detailsUnion:AdMessageDetailsUnion
public var starredCount:Int
required public init(){}
}
public class ImageUrls : Codable
{
public var preview:String
public var small:String
public var medium:String
public var large:String
required public init(){}
}
public class PlaceBasicApiDto : Codable
{
public var id:Int
public var guid:String
public var overview:String
public var name:String
public var longitude:Float
public var latitude:Float
public var claimed:Bool
public var organizationNumber:String
public var countryCode:String
public var openingHours:OpeningHours
public var wheelchairAccessible:Bool?
public var wifi:Bool?
public var outdoorSeating:Bool?
public var saveFoodAndMoney:Bool?
public var placeType:PlaceType
public var priceMainDish:PriceMainDishApiDto
public var timeZoneDto:TimeZoneDto
public var businessId:Int?
public var contact:PlaceContact
public var address:PlaceAddress
public var categories:[CategoryTreeApiDto] = []
public var logoUrl:ImageUrls
public var imageUrl:ImageUrls
public var wearPriceProfiles:[WearPriceProfileEsDto] = []
public var brands:[PlaceSelectedBrandApiDto] = []
public var floor:String
required public init(){}
}
public class OpeningHours : Codable
{
public var weekly:WeeklyOpeningHours
required public init(){}
}
public class WeeklyOpeningHours : Codable
{
public var monday:OpeningHour
public var tuesday:OpeningHour
public var wednesday:OpeningHour
public var thursday:OpeningHour
public var friday:OpeningHour
public var saturday:OpeningHour
public var sunday:OpeningHour
required public init(){}
}
public class OpeningHour : Codable
{
public var openAtHour:Int
public var openAtMinute:Int
public var closeAtHour:Int
public var closeAtMinute:Int
required public init(){}
}
public enum PlaceType : String, Codable
{
case Mall
case Regular
}
public class PriceMainDishApiDto : Codable
{
public var title:String
public var slug:PriceMainDish
required public init(){}
}
public enum PriceMainDish : String, Codable
{
case Value
case Medium
case High
case FineDining
}
public class TimeZoneDto : Codable
{
@TimeSpan public var baseUtcOffset:TimeInterval
public var daylightName:String
public var displayName:String
public var id:String
public var standardName:String
public var supportsDaylightSavingTime:Bool
required public init(){}
}
public class PlaceContact : Codable
{
public var phone:String
public var email:String
public var website:String
public var webShop:String
required public init(){}
}
public class PlaceAddress : Codable
{
public var street:String
public var postalCode:String
public var region:String
public var countryCode:String
required public init(){}
}
public class CategoryTreeApiDto : Codable
{
public var name:String
public var slug:String
public var absoluteSlug:String
public var imageUrl:String
public var allImageUrl:String
public var iconImageUrl:String
public var position:Int
public var children:[CategoryTreeApiDto] = []
required public init(){}
}
public class WearPriceProfileEsDto : Codable
{
public var slug:String
public var label:String
required public init(){}
}
public class PlaceSelectedBrandApiDto : Codable
{
public var brand:BrandApiDto
public var categoryAbsoluteSlugs:[String] = []
public var placeCustomBrand:PlaceCustomBrandApiDto
required public init(){}
}
public class BrandApiDto : Codable
{
public var name:String
required public init(){}
}
public class PlaceCustomBrandApiDto : Codable
{
public var name:String
required public init(){}
}
public class AdMessageDetailsUnion : Codable
{
public var percentageOnAllMerchandise:AdMessageDetailsPercentageDiscountOnAllMerchandise
public var percentageRangeOnAllMerchandise:AdMessageDetailsPercentageDiscountRangeOnAllMerchandise
public var percentageOnSelectedMerchandise:AdMessageDetailsPercentageDiscountOnSelectedMerchandise
public var absoluteOnSelectedMerchandise:AdMessageDetailsAbsoluteDiscountOnSelectedMerchandise
public var absoluteRangeOnAllMerchandise:AdMessageDetailsAbsoluteDiscountRangeOnAllMerchandise
public var totalAmountOverXgivesYdiscount:AdMessageDetailsTotalAmountOverXgivesYdiscount
public var xforY:AdMessageDetailsXforYdiscount
public var newArrivals:AdMessageDetailsNewArrivals
public var freetext:AdMessageDetailsFreetext
public var todaysBreakFastOffer:AdMessageDetailsTodaysBreakFastOffer
public var todaysLunchOffer:AdMessageDetailsTodaysLunchOffer
public var todaysDinnerOffer:AdMessageDetailsTodaysDinnerOffer
public var saveFoodAndMoney:AdMessageDetailsSaveFoodAndMoney
public var percentageOfYourFoodBill:AdMessageDetailsPercentageOffYourFoodBill
public var happyHour:AdMessageDetailsHappyHour
public var someFreeTablesLeftToday:AdMessageDetailsSomeFreeTablesLeftToday
public var twoDishesForThePriceOfOne:AdMessageDetailsTwoDishesForThePriceOfOne
required public init(){}
}
public class AdMessageDetailsPercentageDiscountOnAllMerchandise : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsBase : Codable
{
public var Description:String
public var moreInformation:[String] = []
required public init(){}
}
public class AdMessageDetailsPercentageDiscountRangeOnAllMerchandise : AdMessageDetailsBase
{
public var start:Double
public var stop:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case start
case stop
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
start = try container.decodeIfPresent(Double.self, forKey: .start)
stop = try container.decodeIfPresent(Double.self, forKey: .stop)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if start != nil { try container.encode(start, forKey: .start) }
if stop != nil { try container.encode(stop, forKey: .stop) }
}
}
public class AdMessageDetailsPercentageDiscountOnSelectedMerchandise : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsAbsoluteDiscountOnSelectedMerchandise : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsAbsoluteDiscountRangeOnAllMerchandise : AdMessageDetailsBase
{
public var start:Double
public var stop:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case start
case stop
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
start = try container.decodeIfPresent(Double.self, forKey: .start)
stop = try container.decodeIfPresent(Double.self, forKey: .stop)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if start != nil { try container.encode(start, forKey: .start) }
if stop != nil { try container.encode(stop, forKey: .stop) }
}
}
public class AdMessageDetailsTotalAmountOverXgivesYdiscount : AdMessageDetailsBase
{
public var ifTotalAmountMoreThanX:Double
public var thenYouGetDiscountPercentageY:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case ifTotalAmountMoreThanX
case thenYouGetDiscountPercentageY
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
ifTotalAmountMoreThanX = try container.decodeIfPresent(Double.self, forKey: .ifTotalAmountMoreThanX)
thenYouGetDiscountPercentageY = try container.decodeIfPresent(Double.self, forKey: .thenYouGetDiscountPercentageY)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if ifTotalAmountMoreThanX != nil { try container.encode(ifTotalAmountMoreThanX, forKey: .ifTotalAmountMoreThanX) }
if thenYouGetDiscountPercentageY != nil { try container.encode(thenYouGetDiscountPercentageY, forKey: .thenYouGetDiscountPercentageY) }
}
}
public class AdMessageDetailsXforYdiscount : AdMessageDetailsBase
{
public var ifYouBuyX:Int
public var thenYouGetY:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case ifYouBuyX
case thenYouGetY
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
ifYouBuyX = try container.decodeIfPresent(Int.self, forKey: .ifYouBuyX)
thenYouGetY = try container.decodeIfPresent(Int.self, forKey: .thenYouGetY)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if ifYouBuyX != nil { try container.encode(ifYouBuyX, forKey: .ifYouBuyX) }
if thenYouGetY != nil { try container.encode(thenYouGetY, forKey: .thenYouGetY) }
}
}
public class AdMessageDetailsNewArrivals : AdMessageDetailsBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class AdMessageDetailsFreetext : AdMessageDetailsBase
{
public var title:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case title
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
title = try container.decodeIfPresent(String.self, forKey: .title)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if title != nil { try container.encode(title, forKey: .title) }
}
}
public class AdMessageDetailsTodaysBreakFastOffer : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsTodaysLunchOffer : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsTodaysDinnerOffer : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsSaveFoodAndMoney : AdMessageDetailsBase
{
public var value:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case value
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(Double.self, forKey: .value)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if value != nil { try container.encode(value, forKey: .value) }
}
}
public class AdMessageDetailsPercentageOffYourFoodBill : AdMessageDetailsBase
{
public var percentage:Double
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case percentage
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
percentage = try container.decodeIfPresent(Double.self, forKey: .percentage)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if percentage != nil { try container.encode(percentage, forKey: .percentage) }
}
}
public class AdMessageDetailsHappyHour : AdMessageDetailsBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class AdMessageDetailsSomeFreeTablesLeftToday : AdMessageDetailsBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class AdMessageDetailsTwoDishesForThePriceOfOne : AdMessageDetailsBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public enum SharingState : String, Codable
{
case Teaser
case Awarded
case SelfShare
case Expired
}
Swift ShareAdMessageLinkUsedRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /share/share-ad-message-link-used HTTP/1.1
Host: unstable-consumer-api.brovs.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
shareAdMessageToken: String,
locale: EnUs
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
user:
{
firstName: String,
lastName: String,
profilePhotoUrl: String
},
adMessage:
{
id: 0,
title: String,
startAt: 0001-01-01T00:00:00.0000000+00:00,
stopAt: 0001-01-01T00:00:00.0000000+00:00,
publishAt: 0001-01-01T00:00:00.0000000+00:00,
imageUrls:
[
{
preview: String,
small: String,
medium: String,
large: String
}
],
place:
{
id: 0,
overview: String,
name: String,
longitude: 0,
latitude: 0,
claimed: False,
organizationNumber: String,
countryCode: String,
openingHours:
{
weekly:
{
monday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
tuesday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
wednesday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
thursday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
friday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
saturday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
sunday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
}
}
},
wheelchairAccessible: False,
wifi: False,
outdoorSeating: False,
saveFoodAndMoney: False,
placeType: Mall,
priceMainDish:
{
title: String,
slug: Value
},
timeZoneDto:
{
baseUtcOffset: PT0S,
daylightName: String,
displayName: String,
id: String,
standardName: String,
supportsDaylightSavingTime: False
},
businessId: 0,
contact:
{
phone: String,
email: String,
website: String,
webShop: String
},
address:
{
street: String,
postalCode: String,
region: String,
countryCode: String
},
categories:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0,
children:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0,
children:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0
}
]
}
]
}
],
logoUrl:
{
preview: String,
small: String,
medium: String,
large: String
},
imageUrl:
{
preview: String,
small: String,
medium: String,
large: String
},
wearPriceProfiles:
[
{
slug: String,
label: String
}
],
brands:
[
{
brand:
{
name: String
},
categoryAbsoluteSlugs:
[
String
],
placeCustomBrand:
{
name: String
}
}
],
floor: String
},
detailsUnion:
{
percentageOnAllMerchandise:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
percentageRangeOnAllMerchandise:
{
start: 0,
stop: 0,
description: String,
moreInformation:
[
String
]
},
percentageOnSelectedMerchandise:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
absoluteOnSelectedMerchandise:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
absoluteRangeOnAllMerchandise:
{
start: 0,
stop: 0,
description: String,
moreInformation:
[
String
]
},
totalAmountOverXgivesYdiscount:
{
ifTotalAmountMoreThanX: 0,
thenYouGetDiscountPercentageY: 0,
description: String,
moreInformation:
[
String
]
},
xforY:
{
ifYouBuyX: 0,
thenYouGetY: 0,
description: String,
moreInformation:
[
String
]
},
newArrivals:
{
description: String,
moreInformation:
[
String
]
},
freetext:
{
title: String,
description: String,
moreInformation:
[
String
]
},
todaysBreakFastOffer:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
todaysLunchOffer:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
todaysDinnerOffer:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
saveFoodAndMoney:
{
value: 0,
description: String,
moreInformation:
[
String
]
},
percentageOfYourFoodBill:
{
percentage: 0,
description: String,
moreInformation:
[
String
]
},
happyHour:
{
description: String,
moreInformation:
[
String
]
},
someFreeTablesLeftToday:
{
description: String,
moreInformation:
[
String
]
},
twoDishesForThePriceOfOne:
{
description: String,
moreInformation:
[
String
]
}
},
starredCount: 0
},
place:
{
id: 0,
overview: String,
name: String,
longitude: 0,
latitude: 0,
claimed: False,
organizationNumber: String,
countryCode: String,
openingHours:
{
weekly:
{
monday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
tuesday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
wednesday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
thursday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
friday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
saturday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
},
sunday:
{
openAtHour: 0,
openAtMinute: 0,
closeAtHour: 0,
closeAtMinute: 0
}
}
},
wheelchairAccessible: False,
wifi: False,
outdoorSeating: False,
saveFoodAndMoney: False,
placeType: Mall,
priceMainDish:
{
title: String,
slug: Value
},
timeZoneDto:
{
baseUtcOffset: PT0S,
daylightName: String,
displayName: String,
id: String,
standardName: String,
supportsDaylightSavingTime: False
},
businessId: 0,
contact:
{
phone: String,
email: String,
website: String,
webShop: String
},
address:
{
street: String,
postalCode: String,
region: String,
countryCode: String
},
categories:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0,
children:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0,
children:
[
{
name: String,
slug: String,
absoluteSlug: String,
imageUrl: String,
allImageUrl: String,
iconImageUrl: String,
position: 0
}
]
}
]
}
],
logoUrl:
{
preview: String,
small: String,
medium: String,
large: String
},
imageUrl:
{
preview: String,
small: String,
medium: String,
large: String
},
wearPriceProfiles:
[
{
slug: String,
label: String
}
],
brands:
[
{
brand:
{
name: String
},
categoryAbsoluteSlugs:
[
String
],
placeCustomBrand:
{
name: String
}
}
],
floor: String
},
state: Teaser
}