app.placita.place
Schema Diff
+104 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 36 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.placita.place#osmTag", src: "app.placita.place#osmTag", tgt: "app.placita.place#osmTag.key", kind: "prop", name: Some("key") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.placita.place#osmTag", src: "app.placita.place#osmTag", tgt: "app.placita.place#osmTag.value", kind: "prop", name: Some("value") }
Non-Breaking Changes (36)
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.city" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.country" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.countryCode" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.houseNumber" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.postcode" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.state" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.street" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmAddress.suburb" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.address" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.checkedAt" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.tags" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmDetails.tags:items" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmTag" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmTag.key" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place#osmTag.value" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place:body.osm" }
- AddedVertex AddedVertex { vertex_id: "app.placita.place:body.rating" }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.city", kind: "prop", name: Some("city") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.country", kind: "prop", name: Some("country") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.countryCode", kind: "prop", name: Some("countryCode") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.houseNumber", kind: "prop", name: Some("houseNumber") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.postcode", kind: "prop", name: Some("postcode") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.state", kind: "prop", name: Some("state") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.street", kind: "prop", name: Some("street") }
- AddedEdge AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.suburb", kind: "prop", name: Some("suburb") }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.address", kind: "prop", name: Some("address") }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.checkedAt", kind: "prop", name: Some("checkedAt") }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.tags", kind: "prop", name: Some("tags") }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails.address", tgt: "app.placita.place#osmAddress", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails.tags", tgt: "app.placita.place#osmDetails.tags:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.placita.place#osmDetails.tags:items", tgt: "app.placita.place#osmTag", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.osm", kind: "prop", name: Some("osm") }
- AddedEdge AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.rating", kind: "prop", name: Some("rating") }
- AddedEdge AddedEdge { src: "app.placita.place:body.osm", tgt: "app.placita.place#osmDetails", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.placita.place#osmAddress" }AddedVertex { vertex_id: "app.placita.place#osmAddress.city" }AddedVertex { vertex_id: "app.placita.place#osmAddress.country" }AddedVertex { vertex_id: "app.placita.place#osmAddress.countryCode" }AddedVertex { vertex_id: "app.placita.place#osmAddress.houseNumber" }AddedVertex { vertex_id: "app.placita.place#osmAddress.postcode" }AddedVertex { vertex_id: "app.placita.place#osmAddress.state" }AddedVertex { vertex_id: "app.placita.place#osmAddress.street" }AddedVertex { vertex_id: "app.placita.place#osmAddress.suburb" }AddedVertex { vertex_id: "app.placita.place#osmDetails" }AddedVertex { vertex_id: "app.placita.place#osmDetails.address" }AddedVertex { vertex_id: "app.placita.place#osmDetails.checkedAt" }AddedVertex { vertex_id: "app.placita.place#osmDetails.tags" }AddedVertex { vertex_id: "app.placita.place#osmDetails.tags:items" }AddedVertex { vertex_id: "app.placita.place#osmTag" }AddedVertex { vertex_id: "app.placita.place#osmTag.key" }AddedVertex { vertex_id: "app.placita.place#osmTag.value" }AddedVertex { vertex_id: "app.placita.place:body.osm" }AddedVertex { vertex_id: "app.placita.place:body.rating" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "app.placita.place#osmTag", src: "app.placita.place#osmTag", tgt: "app.placita.place#osmTag.key", kind: "prop", name: Some("key") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.placita.place#osmTag", src: "app.placita.place#osmTag", tgt: "app.placita.place#osmTag.value", kind: "prop", name: Some("value") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.city", kind: "prop", name: Some("city") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.country", kind: "prop", name: Some("country") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.countryCode", kind: "prop", name: Some("countryCode") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.houseNumber", kind: "prop", name: Some("houseNumber") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.postcode", kind: "prop", name: Some("postcode") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.state", kind: "prop", name: Some("state") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.street", kind: "prop", name: Some("street") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmAddress", tgt: "app.placita.place#osmAddress.suburb", kind: "prop", name: Some("suburb") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.address", kind: "prop", name: Some("address") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.checkedAt", kind: "prop", name: Some("checkedAt") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails", tgt: "app.placita.place#osmDetails.tags", kind: "prop", name: Some("tags") }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails.address", tgt: "app.placita.place#osmAddress", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails.tags", tgt: "app.placita.place#osmDetails.tags:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.placita.place#osmDetails.tags:items", tgt: "app.placita.place#osmTag", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.osm", kind: "prop", name: Some("osm") }
- Non-breaking: AddedEdge { src: "app.placita.place:body", tgt: "app.placita.place:body.rating", kind: "prop", name: Some("rating") }
- Non-breaking: AddedEdge { src: "app.placita.place:body.osm", tgt: "app.placita.place#osmDetails", kind: "ref", name: None }
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
+
"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.",
96
+
"ref": "#osmDetails",
97
+
"type": "ref"
98
+
},
94
99
"osmId": {
95
100
"description": "ID of the linked OpenStreetMap feature as a decimal string. Used together with osmType.",
96
101
"maxLength": 32,
97
102
"type": "string"
98
103
},
99
104
"osmType": {
100
105
"description": "Type of the linked OpenStreetMap feature. Set only when the user confirmed the match. Used together with osmId.",
101
106
"knownValues": [
102
107
"node",
103
108
"way",
104
109
"relation"
105
110
],
106
111
"type": "string"
107
112
},
108
113
"phone": {
109
114
"description": "The place's phone number, as entered or taken from OpenStreetMap.",
110
115
"maxLength": 64,
111
116
"type": "string"
112
117
},
113
118
"photo": {
114
119
"accept": [
115
120
"image/png",
116
121
"image/jpeg",
117
122
"image/webp"
118
123
],
119
124
"description": "Legacy single photo. Only older records have it. New records use photos.",
120
125
"maxSize": 2000000,
121
126
"type": "blob"
122
127
},
123
128
"photos": {
124
129
"description": "Photos the user uploaded for this place. Up to 4.",
125
130
"items": {
126
131
"accept": [
127
132
"image/png",
128
133
"image/jpeg",
129
134
"image/webp"
130
135
],
131
136
"maxSize": 2000000,
132
137
"type": "blob"
133
138
},
134
139
"maxItems": 4,
135
140
"type": "array"
136
141
},
142
+
"rating": {
143
+
"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
+
"maximum": 5,
145
+
"minimum": 1,
146
+
"type": "integer"
147
+
},
137
148
"source": {
138
149
"description": "Where the place came from: a map or review link the user pasted, an OpenStreetMap search result, or manual entry.",
139
150
"knownValues": [
140
151
"google",
141
152
"foursquare",
142
153
"osm",
143
154
"apple",
144
155
"tripadvisor",
145
156
"manual"
146
157
],
147
158
"type": "string"
148
159
},
149
160
"sourcePhotoAuthor": {
150
161
"description": "Creator or credit text returned by Wikimedia Commons for sourcePhotoUrl.",
151
162
"maxLength": 500,
152
163
"type": "string"
153
164
},
154
165
"sourcePhotoLicense": {
155
166
"description": "License of sourcePhotoUrl, e.g. CC BY-SA 4.0. Attribution duty applies when shown.",
156
167
"maxLength": 64,
157
168
"type": "string"
158
169
},
159
170
"sourcePhotoLicenseUrl": {
160
171
"description": "License details URL returned by Wikimedia Commons.",
161
172
"maxLength": 2048,
162
173
"type": "string"
163
174
},
164
175
"sourcePhotoPageUrl": {
165
176
"description": "Source file page URL for attribution and reuse details.",
166
177
"maxLength": 2048,
167
178
"type": "string"
168
179
},
169
180
"sourcePhotoSourceName": {
170
181
"description": "Origin label for the source photo suggestion.",
171
182
"maxLength": 128,
172
183
"type": "string"
173
184
},
174
185
"sourcePhotoUrl": {
175
186
"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.",
176
187
"maxLength": 2048,
177
188
"type": "string"
178
189
},
179
190
"sourceUrl": {
180
191
"description": "The link the place was created from, when there was one.",
181
192
"maxLength": 2048,
182
193
"type": "string"
183
194
},
184
195
"status": {
185
196
"default": "want",
186
197
"description": "want means the user wants to go there. been means the user has been there.",
187
198
"knownValues": [
188
199
"want",
189
200
"been"
190
201
],
191
202
"type": "string"
192
203
},
193
204
"tags": {
194
205
"description": "The user's tags for this place, as strong references to app.placita.tag records.",
195
206
"items": {
196
207
"ref": "com.atproto.repo.strongRef",
197
208
"type": "ref"
198
209
},
199
210
"maxLength": 50,
200
211
"type": "array"
201
212
},
202
213
"visibility": {
203
214
"default": "hidden",
204
215
"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.",
205
216
"knownValues": [
206
217
"hidden",
207
218
"public"
208
219
],
209
220
"type": "string"
210
221
},
211
222
"website": {
212
223
"description": "The place's website.",
213
224
"maxLength": 2048,
214
225
"type": "string"
215
226
}
216
227
},
217
228
"required": [
218
229
"name",
219
230
"status",
220
231
"visibility",
221
232
"location",
222
233
"createdAt"
223
234
],
224
235
"type": "object"
225
236
},
226
237
"type": "record"
238
+
},
239
+
"osmAddress": {
240
+
"description": "A structured address, as OpenStreetMap returns it. Every part is optional.",
241
+
"properties": {
242
+
"city": {
243
+
"description": "City, town or village.",
244
+
"maxLength": 200,
245
+
"type": "string"
246
+
},
247
+
"country": {
248
+
"description": "Country name.",
249
+
"maxLength": 200,
250
+
"type": "string"
251
+
},
252
+
"countryCode": {
253
+
"description": "Two-letter ISO 3166-1 country code, upper case.",
254
+
"maxLength": 2,
255
+
"minLength": 2,
256
+
"type": "string"
257
+
},
258
+
"houseNumber": {
259
+
"description": "House or building number.",
260
+
"maxLength": 32,
261
+
"type": "string"
262
+
},
263
+
"postcode": {
264
+
"description": "Postal code.",
265
+
"maxLength": 32,
266
+
"type": "string"
267
+
},
268
+
"state": {
269
+
"description": "Region or state.",
270
+
"maxLength": 200,
271
+
"type": "string"
272
+
},
273
+
"street": {
274
+
"description": "Street or road name.",
275
+
"maxLength": 200,
276
+
"type": "string"
277
+
},
278
+
"suburb": {
279
+
"description": "Neighbourhood, quarter or suburb.",
280
+
"maxLength": 200,
281
+
"type": "string"
282
+
}
283
+
},
284
+
"type": "object"
285
+
},
286
+
"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.",
288
+
"properties": {
289
+
"address": {
290
+
"description": "The structured address OpenStreetMap has for the feature.",
291
+
"ref": "#osmAddress",
292
+
"type": "ref"
293
+
},
294
+
"checkedAt": {
295
+
"description": "When the details were copied from OpenStreetMap.",
296
+
"format": "datetime",
297
+
"type": "string"
298
+
},
299
+
"tags": {
300
+
"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
+
"items": {
302
+
"ref": "#osmTag",
303
+
"type": "ref"
304
+
},
305
+
"maxLength": 60,
306
+
"type": "array"
307
+
}
308
+
},
309
+
"type": "object"
310
+
},
311
+
"osmTag": {
312
+
"description": "One OpenStreetMap tag.",
313
+
"properties": {
314
+
"key": {
315
+
"description": "The tag key, for example cuisine.",
316
+
"maxLength": 64,
317
+
"type": "string"
318
+
},
319
+
"value": {
320
+
"description": "The tag value, for example italian;pizza. Values over 255 characters are not stored.",
321
+
"maxGraphemes": 255,
322
+
"maxLength": 1024,
323
+
"type": "string"
324
+
}
325
+
},
326
+
"required": [
327
+
"key",
328
+
"value"
329
+
],
330
+
"type": "object"
227
331
}
228
332
},
229
333
"id": "app.placita.place",
230
334
"lexicon": 1
231
335
}