app.placita.place
Schema Diff
+19 -3
Compatibility Analysis
Backward Compatible
Backward compatible. 6 non-breaking changes.
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.editedAt" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place:body.photoCredit" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place:body.placeCode" }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.editedAt", kind: "prop", name: Some("editedAt") }
- AddedEdge AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.photoCredit", kind: "prop", name: Some("photoCredit") }
- AddedEdge AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.placeCode", kind: "prop", name: Some("placeCode") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.placita.place#osmDetails.editedAt" }AddedVertex { vertex_id: "app.placita.place:body.photoCredit" }AddedVertex { vertex_id: "app.placita.place:body.placeCode" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.editedAt", kind: "prop", name: Some("editedAt") }
- Non-breaking: AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.photoCredit", kind: "prop", name: Some("photoCredit") }
- Non-breaking: AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.placeCode", kind: "prop", name: Some("placeCode") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A place saved by a user. The primary entity of Placita: one record per place, stored in the user's own repository.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"category": {
10
10
"description": "Place type from Placita's fixed list, for example restaurant, cafe or museum. Missing or unknown means generic.",
11
11
"knownValues": [
12
12
"generic",
13
13
"restaurant",
14
14
"fastfood",
15
15
"cafe",
16
16
"bar",
17
17
"beer",
18
18
"wine",
19
19
"nightclub",
20
20
"bakery",
21
21
"grocery",
22
22
"clothing",
23
23
"shopping",
24
24
"lodging",
25
25
"campsite",
26
26
"museum",
27
27
"attraction",
28
28
"viewpoint",
29
29
"worship",
30
30
"park",
31
31
"playground",
32
32
"sports",
33
33
"swimming",
34
34
"zoo",
35
35
"cinema",
36
36
"theatre",
37
37
"library",
38
38
"school",
39
39
"college",
40
40
"hospital",
41
41
"pharmacy",
42
42
"doctor",
43
43
"dentist",
44
44
"bank",
45
45
"atm",
46
46
"post",
47
47
"police",
48
48
"fuel",
49
49
"parking",
50
50
"bus",
51
51
"rail",
52
52
"airport",
53
53
"ferry"
54
54
],
55
55
"maxLength": 32,
56
56
"type": "string"
57
57
},
58
58
"createdAt": {
59
59
"description": "When the place was saved.",
60
60
"format": "datetime",
61
61
"type": "string"
62
62
},
63
63
"location": {
64
64
"description": "Where the place is. Normally community.lexicon.location.geo: coordinates as strings, with the street address in its name field when known.",
65
65
"refs": [
66
66
"community.lexicon.location.geo",
67
67
"community.lexicon.location.address"
68
68
],
69
69
"type": "union"
70
70
},
71
71
"name": {
72
72
"description": "Name of the place as the user saved it.",
73
73
"maxGraphemes": 100,
74
74
"maxLength": 300,
75
75
"type": "string"
76
76
},
77
77
"note": {
78
78
"description": "The user's own note about the place.",
79
79
"maxGraphemes": 1000,
80
80
"maxLength": 3000,
81
81
"type": "string"
82
82
},
83
83
"noteTitle": {
84
84
"description": "Optional short title for the note.",
85
85
"maxGraphemes": 100,
86
86
"maxLength": 100,
87
87
"type": "string"
88
88
},
89
89
"openingHours": {
90
90
"description": "Opening hours in OpenStreetMap opening_hours syntax, for example Mo-Su 09:00-18:00.",
91
91
"maxLength": 512,
92
92
"type": "string"
93
93
},
94
94
"osm": {
95
-
"description": "Details copied from OpenStreetMap when the place was linked. Only set together with osmType and osmId. A copy made at a point in time: it is not kept up to date.",
95
+
"description": "Details in OpenStreetMap's own words (structured address, tags). Copied from OpenStreetMap when the place is linked (see checkedAt), and editable by the person (see editedAt). May also hold details typed for a place with no link. A copy made at a point in time: it is not kept up to date.",
96
96
"ref": "#osmDetails",
97
97
"type": "ref"
98
98
},
99
99
"osmId": {
100
100
"description": "ID of the linked OpenStreetMap feature as a decimal string. Used together with osmType.",
101
101
"maxLength": 32,
102
102
"type": "string"
103
103
},
104
104
"osmType": {
105
105
"description": "Type of the linked OpenStreetMap feature. Set only when the user confirmed the match. Used together with osmId.",
106
106
"knownValues": [
107
107
"node",
108
108
"way",
109
109
"relation"
110
110
],
111
111
"type": "string"
112
112
},
113
113
"phone": {
114
114
"description": "The place's phone number, as entered or taken from OpenStreetMap.",
115
115
"maxLength": 64,
116
116
"type": "string"
117
117
},
118
118
"photo": {
119
119
"accept": [
120
120
"image/png",
121
121
"image/jpeg",
122
122
"image/webp"
123
123
],
124
124
"description": "Legacy single photo. Only older records have it. New records use photos.",
125
125
"maxSize": 2000000,
126
126
"type": "blob"
127
127
},
128
+
"photoCredit": {
129
+
"description": "Who took the photos in photos, when they are not the person who owns this record, for example because they were copied from a public place of another person. Free text such as Photos by @alice.example. Only set together with photos.",
130
+
"maxGraphemes": 100,
131
+
"maxLength": 300,
132
+
"type": "string"
133
+
},
128
134
"photos": {
129
135
"description": "Photos the user uploaded for this place. Up to 4.",
130
136
"items": {
131
137
"accept": [
132
138
"image/png",
133
139
"image/jpeg",
134
140
"image/webp"
135
141
],
136
142
"maxSize": 2000000,
137
143
"type": "blob"
138
144
},
139
145
"maxItems": 4,
140
146
"type": "array"
141
147
},
148
+
"placeCode": {
149
+
"description": "An opaque random code that names the place itself, for a place with no confirmed OpenStreetMap link. The person who first saves such a place makes it; every copy another person saves keeps it unchanged, so copies of one place can be found together. Not set when the place has an OpenStreetMap link, which names the place instead. Lowercase letters and the digits 2 to 7.",
150
+
"maxLength": 64,
151
+
"type": "string"
152
+
},
142
153
"rating": {
143
154
"description": "The user's own rating of the place, from 1 (poor) to 5 (excellent). Only set when status is been. Absent means not rated.",
144
155
"maximum": 5,
145
156
"minimum": 1,
146
157
"type": "integer"
147
158
},
148
159
"source": {
149
160
"description": "Where the place came from: a map or review link the user pasted, an OpenStreetMap search result, or manual entry.",
150
161
"knownValues": [
151
162
"google",
152
163
"foursquare",
153
164
"osm",
154
165
"apple",
155
166
"tripadvisor",
156
167
"manual"
157
168
],
158
169
"type": "string"
159
170
},
160
171
"sourcePhotoAuthor": {
161
172
"description": "Creator or credit text returned by Wikimedia Commons for sourcePhotoUrl.",
162
173
"maxLength": 500,
163
174
"type": "string"
164
175
},
165
176
"sourcePhotoLicense": {
166
177
"description": "License of sourcePhotoUrl, e.g. CC BY-SA 4.0. Attribution duty applies when shown.",
167
178
"maxLength": 64,
168
179
"type": "string"
169
180
},
170
181
"sourcePhotoLicenseUrl": {
171
182
"description": "License details URL returned by Wikimedia Commons.",
172
183
"maxLength": 2048,
173
184
"type": "string"
174
185
},
175
186
"sourcePhotoPageUrl": {
176
187
"description": "Source file page URL for attribution and reuse details.",
177
188
"maxLength": 2048,
178
189
"type": "string"
179
190
},
180
191
"sourcePhotoSourceName": {
181
192
"description": "Origin label for the source photo suggestion.",
182
193
"maxLength": 128,
183
194
"type": "string"
184
195
},
185
196
"sourcePhotoUrl": {
186
197
"description": "URL of a free-licensed photo found for this place (Wikimedia Commons, OSM image tag, Wikidata P18). Not a blob - it is a reference to an external image, with attribution.",
187
198
"maxLength": 2048,
188
199
"type": "string"
189
200
},
190
201
"sourceUrl": {
191
202
"description": "The link the place was created from, when there was one.",
192
203
"maxLength": 2048,
193
204
"type": "string"
194
205
},
195
206
"status": {
196
207
"default": "want",
197
208
"description": "want means the user wants to go there. been means the user has been there.",
198
209
"knownValues": [
199
210
"want",
200
211
"been"
201
212
],
202
213
"type": "string"
203
214
},
204
215
"tags": {
205
216
"description": "The user's tags for this place, as strong references to app.placita.tag records.",
206
217
"items": {
207
218
"ref": "com.atproto.repo.strongRef",
208
219
"type": "ref"
209
220
},
210
221
"maxLength": 50,
211
222
"type": "array"
212
223
},
213
224
"visibility": {
214
225
"default": "hidden",
215
226
"description": "Whether Placita shows this place in public discovery. This is a display hint only: every record in an AT Protocol repository can be read by anyone, including hidden ones.",
216
227
"knownValues": [
217
228
"hidden",
218
229
"public"
219
230
],
220
231
"type": "string"
221
232
},
222
233
"website": {
223
234
"description": "The place's website.",
224
235
"maxLength": 2048,
225
236
"type": "string"
226
237
}
227
238
},
228
239
"required": [
229
240
"name",
230
241
"status",
231
242
"visibility",
232
243
"location",
233
244
"createdAt"
234
245
],
235
246
"type": "object"
236
247
},
237
248
"type": "record"
238
249
},
239
250
"osmAddress": {
240
251
"description": "A structured address, as OpenStreetMap returns it. Every part is optional.",
241
252
"properties": {
242
253
"city": {
243
254
"description": "City, town or village.",
244
255
"maxLength": 200,
245
256
"type": "string"
246
257
},
247
258
"country": {
248
259
"description": "Country name.",
249
260
"maxLength": 200,
250
261
"type": "string"
251
262
},
252
263
"countryCode": {
253
264
"description": "Two-letter ISO 3166-1 country code, upper case.",
254
265
"maxLength": 2,
255
266
"minLength": 2,
256
267
"type": "string"
257
268
},
258
269
"houseNumber": {
259
270
"description": "House or building number.",
260
271
"maxLength": 32,
261
272
"type": "string"
262
273
},
263
274
"postcode": {
264
275
"description": "Postal code.",
265
276
"maxLength": 32,
266
277
"type": "string"
267
278
},
268
279
"state": {
269
280
"description": "Region or state.",
270
281
"maxLength": 200,
271
282
"type": "string"
272
283
},
273
284
"street": {
274
285
"description": "Street or road name.",
275
286
"maxLength": 200,
276
287
"type": "string"
277
288
},
278
289
"suburb": {
279
290
"description": "Neighbourhood, quarter or suburb.",
280
291
"maxLength": 200,
281
292
"type": "string"
282
293
}
283
294
},
284
295
"type": "object"
285
296
},
286
297
"osmDetails": {
287
-
"description": "A copy of what OpenStreetMap knew about the linked feature at checkedAt. Data (c) OpenStreetMap contributors, available under the Open Database Licence (ODbL). Treat the values as suggestions: they can be wrong or out of date, and the user's own fields always win.",
298
+
"description": "Address and tags in OpenStreetMap's vocabulary: a copy of what OpenStreetMap knew about the linked feature at checkedAt, and/or what the person typed (editedAt). Data copied from OpenStreetMap is (c) OpenStreetMap contributors, available under the Open Database Licence (ODbL). Treat the values as suggestions: they can be wrong or out of date, and the user's own fields always win.",
288
299
"properties": {
289
300
"address": {
290
301
"description": "The structured address OpenStreetMap has for the feature.",
291
302
"ref": "#osmAddress",
292
303
"type": "ref"
293
304
},
294
305
"checkedAt": {
295
-
"description": "When the details were copied from OpenStreetMap.",
306
+
"description": "When the details were copied from OpenStreetMap. Absent for details that were only typed.",
307
+
"format": "datetime",
308
+
"type": "string"
309
+
},
310
+
"editedAt": {
311
+
"description": "When the person last changed these details by hand, or typed them. Details with no checkedAt were never copied from OpenStreetMap.",
296
312
"format": "datetime",
297
313
"type": "string"
298
314
},
299
315
"tags": {
300
316
"description": "Raw OpenStreetMap tags (key and value) of the feature, such as cuisine, wheelchair or wikidata. Tags already stored in other fields (name, website, phone, opening hours) and OpenStreetMap-internal tags (source, note, fixme) are left out. At most 60.",
301
317
"items": {
302
318
"ref": "#osmTag",
303
319
"type": "ref"
304
320
},
305
321
"maxLength": 60,
306
322
"type": "array"
307
323
}
308
324
},
309
325
"type": "object"
310
326
},
311
327
"osmTag": {
312
328
"description": "One OpenStreetMap tag.",
313
329
"properties": {
314
330
"key": {
315
331
"description": "The tag key, for example cuisine.",
316
332
"maxLength": 64,
317
333
"type": "string"
318
334
},
319
335
"value": {
320
336
"description": "The tag value, for example italian;pizza. Values over 255 characters are not stored.",
321
337
"maxGraphemes": 255,
322
338
"maxLength": 1024,
323
339
"type": "string"
324
340
}
325
341
},
326
342
"required": [
327
343
"key",
328
344
"value"
329
345
],
330
346
"type": "object"
331
347
}
332
348
},
333
349
"id": "app.placita.place",
334
350
"lexicon": 1
335
351
}