├── scripts
├── pages
│ ├── photographer.js
│ └── index.js
├── utils
│ └── contactForm.js
└── templates
│ └── photographer.js
├── assets
├── favicon.png
├── images
│ └── logo.png
├── photographers
│ └── account.png
└── icons
│ └── close.svg
├── README.md
├── index.html
├── css
├── style.css
└── photographer.css
├── photographer.html
└── data
└── photographers.json
/scripts/pages/photographer.js:
--------------------------------------------------------------------------------
1 | //Mettre le code JavaScript lié à la page photographer.html
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenClassrooms-Student-Center/Front-End-Fisheye/HEAD/assets/favicon.png
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenClassrooms-Student-Center/Front-End-Fisheye/HEAD/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/photographers/account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenClassrooms-Student-Center/Front-End-Fisheye/HEAD/assets/photographers/account.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Base de code du projet P6 - Parcours Front-end
2 |
3 | ## Démarrer le projet
4 |
5 | Rien à installer ici, il suffit d'ouvrir le fichier `index.html`.
6 |
7 |
--------------------------------------------------------------------------------
/assets/icons/close.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/scripts/utils/contactForm.js:
--------------------------------------------------------------------------------
1 | function displayModal() {
2 | const modal = document.getElementById("contact_modal");
3 | modal.style.display = "block";
4 | }
5 |
6 | function closeModal() {
7 | const modal = document.getElementById("contact_modal");
8 | modal.style.display = "none";
9 | }
10 |
--------------------------------------------------------------------------------
/scripts/templates/photographer.js:
--------------------------------------------------------------------------------
1 | function photographerTemplate(data) {
2 | const { name, portrait } = data;
3 |
4 | const picture = `assets/photographers/${portrait}`;
5 |
6 | function getUserCardDOM() {
7 | const article = document.createElement( 'article' );
8 | const img = document.createElement( 'img' );
9 | img.setAttribute("src", picture)
10 | const h2 = document.createElement( 'h2' );
11 | h2.textContent = name;
12 | article.appendChild(img);
13 | article.appendChild(h2);
14 | return (article);
15 | }
16 | return { name, picture, getUserCardDOM }
17 | }
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Fisheye
9 |
10 |
11 |
12 |
13 | Nos photographes
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/css/style.css:
--------------------------------------------------------------------------------
1 | @import url("photographer.css");
2 |
3 | body {
4 | font-family: "DM Sans", sans-serif;
5 | margin: 0;
6 | }
7 |
8 |
9 | header {
10 | display: flex;
11 | flex-direction: row;
12 | justify-content: space-between;
13 | align-items: center;
14 | height: 90px;
15 | }
16 |
17 | h1 {
18 | color: #901C1C;
19 | margin-right: 100px;
20 | }
21 |
22 | .logo {
23 | height: 50px;
24 | margin-left: 100px;
25 | }
26 |
27 | .photographer_section {
28 | display: grid;
29 | grid-template-columns: 1fr 1fr 1fr;
30 | gap: 70px;
31 | margin-top: 100px;
32 | }
33 |
34 | .photographer_section article {
35 | justify-self: center;
36 | display: flex;
37 | justify-content: center;
38 | align-items: center;
39 | flex-direction: column;
40 | }
41 |
42 | .photographer_section article h2 {
43 | color: #D3573C;
44 | font-size: 36px;
45 | }
46 |
47 | .photographer_section article img {
48 | height: 200px;
49 | width: 200px;
50 | }
--------------------------------------------------------------------------------
/photographer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Fisheye - photographe
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
19 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/css/photographer.css:
--------------------------------------------------------------------------------
1 | #contact_modal {
2 | display: none;
3 | }
4 |
5 | .photograph-header {
6 | background-color: #FAFAFA;
7 | height: 300px;
8 | margin: 0 100px;
9 | }
10 |
11 | .contact_button {
12 | font-size: 20px;
13 | font-weight: bold;
14 | color: white;
15 | padding: 11px;
16 | width: 170px;
17 | height: 70px;
18 | border: none;
19 | background-color: #901C1C;
20 | border-radius: 5px;
21 | cursor: pointer;
22 | }
23 |
24 | .modal {
25 | border-radius: 5px;
26 | background-color: #DB8876;
27 | width: 50%;
28 | display: flex;
29 | flex-direction: column;
30 | align-items: center;
31 | justify-content: space-between;
32 | padding: 35px;
33 | margin: auto;
34 | }
35 |
36 | .modal header {
37 | justify-content: space-between;
38 | width: 100%;
39 | }
40 |
41 | .modal header img {
42 | cursor: pointer;
43 | }
44 |
45 | .modal header h2 {
46 | font-size: 64px;
47 | font-weight: normal;
48 | text-align: center;
49 | }
50 |
51 | form {
52 | display: flex;
53 | width: 100%;
54 | flex-direction: column;
55 | align-items: flex-start;
56 | }
57 |
58 | form label {
59 | color: #312E2E;
60 | font-size: 36px;
61 | }
62 |
63 | form div {
64 | display: flex;
65 | flex-direction: column;
66 | width: 100%;
67 | align-items: self-start;
68 | margin-bottom: 26px;
69 | }
70 |
71 | form input {
72 | width: 100%;
73 | height: 68px;
74 | border: none;
75 | border-radius: 5px;
76 | }
--------------------------------------------------------------------------------
/scripts/pages/index.js:
--------------------------------------------------------------------------------
1 | async function getPhotographers() {
2 | // Ceci est un exemple de données pour avoir un affichage de photographes de test dès le démarrage du projet,
3 | // mais il sera à remplacer avec une requête sur le fichier JSON en utilisant "fetch".
4 | let photographers = [
5 | {
6 | "name": "Ma data test",
7 | "id": 1,
8 | "city": "Paris",
9 | "country": "France",
10 | "tagline": "Ceci est ma data test",
11 | "price": 400,
12 | "portrait": "account.png"
13 | },
14 | {
15 | "name": "Autre data test",
16 | "id": 2,
17 | "city": "Londres",
18 | "country": "UK",
19 | "tagline": "Ceci est ma data test 2",
20 | "price": 500,
21 | "portrait": "account.png"
22 | },
23 | ]
24 | // et bien retourner le tableau photographers seulement une fois récupéré
25 | return ({
26 | photographers: [...photographers, ...photographers, ...photographers]})
27 | }
28 |
29 | async function displayData(photographers) {
30 | const photographersSection = document.querySelector(".photographer_section");
31 |
32 | photographers.forEach((photographer) => {
33 | const photographerModel = photographerTemplate(photographer);
34 | const userCardDOM = photographerModel.getUserCardDOM();
35 | photographersSection.appendChild(userCardDOM);
36 | });
37 | }
38 |
39 | async function init() {
40 | // Récupère les datas des photographes
41 | const { photographers } = await getPhotographers();
42 | displayData(photographers);
43 | }
44 |
45 | init();
46 |
47 |
--------------------------------------------------------------------------------
/data/photographers.json:
--------------------------------------------------------------------------------
1 | {
2 | "photographers": [
3 | {
4 | "name": "Mimi Keel",
5 | "id": 243,
6 | "city": "London",
7 | "country": "UK",
8 | "tagline": "Voir le beau dans le quotidien",
9 | "price": 400,
10 | "portrait": "MimiKeel.jpg"
11 | },
12 | {
13 | "name": "Ellie-Rose Wilkens",
14 | "id": 930,
15 | "city": "Paris",
16 | "country": "France",
17 | "tagline": "Capturer des compositions complexes",
18 | "price": 250,
19 | "portrait": "EllieRoseWilkens.jpg"
20 | },
21 | {
22 | "name": "Tracy Galindo",
23 | "id": 82,
24 | "city": "Montreal",
25 | "country": "Canada",
26 | "tagline": "Photographe freelance",
27 | "price": 500,
28 | "portrait": "TracyGalindo.jpg"
29 | },
30 | {
31 | "name": "Nabeel Bradford",
32 | "id": 527,
33 | "city": "Mexico City",
34 | "country": "Mexico",
35 | "tagline": "Toujours aller de l'avant",
36 | "price": 350,
37 | "portrait": "NabeelBradford.jpg"
38 | },
39 | {
40 | "name": "Rhode Dubois",
41 | "id": 925,
42 | "city": "Barcelona",
43 | "country": "Spain",
44 | "tagline": "Je crée des souvenirs",
45 | "price": 275,
46 | "portrait": "RhodeDubois.jpg"
47 | },
48 | {
49 | "name": "Marcel Nikolic",
50 | "id": 195,
51 | "city": "Berlin",
52 | "country": "Germany",
53 | "tagline": "Toujours à la recherche de LA photo",
54 | "price": 300,
55 | "portrait": "MarcelNikolic.jpg"
56 | }
57 | ],
58 | "media": [
59 | {
60 | "id": 342550,
61 | "photographerId": 82,
62 | "title": "Fashion Yellow Beach",
63 | "image": "Fashion_Yellow_Beach.jpg",
64 | "likes": 62,
65 | "date": "2011-12-08",
66 | "price": 55
67 | },
68 | {
69 | "id": 8520927,
70 | "photographerId": 82,
71 | "title": "Fashion Urban Jungle",
72 | "image": "Fashion_Urban_Jungle.jpg",
73 | "likes": 11,
74 | "date": "2011-11-06",
75 | "price": 55
76 | },
77 | {
78 | "id": 9025895,
79 | "photographerId": 82,
80 | "title": "Fashion Pattern on a Pattern",
81 | "image": "Fashion_Pattern_on_Pattern.jpg",
82 | "likes": 72,
83 | "date": "2013-08-12",
84 | "price": 55
85 | },
86 | {
87 | "id": 9275938,
88 | "photographerId": 82,
89 | "title": "Wedding Gazebo",
90 | "image": "Event_WeddingGazebo.jpg",
91 | "likes": 69,
92 | "date": "2018-02-22",
93 | "price": 55
94 | },
95 | {
96 | "id": 2053494,
97 | "photographerId": 82,
98 | "title": "Sparkles",
99 | "image": "Event_Sparklers.jpg",
100 | "likes": 2,
101 | "date": "2020-05-25",
102 | "price": 55
103 | },
104 | {
105 | "id": 7324238,
106 | "photographerId": 82,
107 | "title": "18th Anniversary",
108 | "image": "Event_18thAnniversary.jpg",
109 | "likes": 33,
110 | "date": "2019-06-12",
111 | "price": 55
112 | },
113 | {
114 | "id": 8328953,
115 | "photographerId": 82,
116 | "title": "Wooden sculpture of a horse",
117 | "video": "Art_Wooden_Horse_Sculpture.mp4",
118 | "likes": 24,
119 | "date": "2011-12-08",
120 | "price": 100
121 | },
122 | {
123 | "id": 7502053,
124 | "photographerId": 82,
125 | "title": "Triangle Man",
126 | "image": "Art_Triangle_Man.jpg",
127 | "likes": 88,
128 | "date": "2007-05-07",
129 | "price": 55
130 | },
131 | {
132 | "id": 8523492,
133 | "photographerId": 82,
134 | "title": "Purple Tunnel",
135 | "image": "Art_Purple_light.jpg",
136 | "likes": 24,
137 | "date": "2018-05-05",
138 | "price": 55
139 | },
140 | {
141 | "id": 75902334,
142 | "photographerId": 82,
143 | "title": "Art Mine",
144 | "image": "Art_Mine.jpg",
145 | "likes": 75,
146 | "date": "2019-11-25",
147 | "price": 55
148 | },
149 |
150 | {
151 | "id": 73852953,
152 | "photographerId": 925,
153 | "title": "8 Rows",
154 | "image": "Sport_2000_with_8.jpg",
155 | "likes": 52,
156 | "date": "2013-02-30",
157 | "price": 70
158 | },
159 | {
160 | "id": 92758372,
161 | "photographerId": 925,
162 | "title": "Fashion Wings",
163 | "image": "Fashion_Wings.jpg",
164 | "likes": 58,
165 | "date": "2018-07-17",
166 | "price": 70
167 | },
168 | {
169 | "id": 32958383,
170 | "photographerId": 925,
171 | "title": "Melody Red on Stripes",
172 | "image": "Fashion_Melody_Red_on_Stripes.jpg",
173 | "likes": 11,
174 | "date": "2019-08-12",
175 | "price": 70
176 | },
177 | {
178 | "id": 928587383,
179 | "photographerId": 925,
180 | "title": "Venture Conference",
181 | "image": "Event_VentureConference.jpg",
182 | "likes": 2,
183 | "date": "2019-01-02",
184 | "price": 70
185 | },
186 | {
187 | "id": 725639493,
188 | "photographerId": 925,
189 | "title": "Product Pitch",
190 | "image": "Event_ProductPitch.jpg",
191 | "likes": 3,
192 | "date": "2019-05-20",
193 | "price": 70
194 | },
195 | {
196 | "id": 23394384,
197 | "photographerId": 925,
198 | "title": "Musical Festival Keyboard",
199 | "image": "Event_KeyboardCheck.jpg",
200 | "likes": 52,
201 | "date": "2019-07-18",
202 | "price": 70
203 | },
204 | {
205 | "id": 87367293,
206 | "photographerId": 925,
207 | "title": "Musical Festival Singer",
208 | "image": "Event_Emcee.jpg",
209 | "likes": 23,
210 | "date": "2018-02-22",
211 | "price": 70
212 | },
213 | {
214 | "id": 593834784,
215 | "photographerId": 925,
216 | "title": "Animal Majesty",
217 | "image": "Animals_Majesty.jpg",
218 | "likes": 52,
219 | "date": "2017-03-13",
220 | "price": 70
221 | },
222 | {
223 | "id": 83958935,
224 | "photographerId": 925,
225 | "title": "Cute puppy on sunset",
226 | "video": "Animals_Puppiness.mp4",
227 | "likes": 52,
228 | "date": "2016-06-12",
229 | "price": 70
230 | },
231 | {
232 | "id": 394583434,
233 | "photographerId": 527,
234 | "title": "Rocky mountains from the air",
235 | "video": "Travel_Rock_Mountains.mp4",
236 | "likes": 23,
237 | "date": "2017-03-18",
238 | "price": 45
239 | },
240 | {
241 | "id": 343423425,
242 | "photographerId": 527,
243 | "title": "Outdoor Baths",
244 | "image": "Travel_Outdoor_Baths.jpg",
245 | "likes": 101,
246 | "date": "2017-04-03",
247 | "price": 45
248 | },
249 | {
250 | "id": 73434243,
251 | "photographerId": 527,
252 | "title": "Road into the Hill",
253 | "image": "Travel_Road_into_Hill.jpg",
254 | "likes": 99,
255 | "date": "2018-04-30",
256 | "price": 45
257 | },
258 | {
259 | "id": 23425523,
260 | "photographerId": 527,
261 | "title": "Bridge into the Forest",
262 | "image": "Travel_Bridge_into_Forest.jpg",
263 | "likes": 34,
264 | "date": "2016-04-05",
265 | "price": 45
266 | },
267 | {
268 | "id": 23134513,
269 | "photographerId": 527,
270 | "title": "Boat Wonderer",
271 | "image": "Travel_Boat_Wanderer.jpg",
272 | "likes": 23,
273 | "date": "2017-03-18",
274 | "price": 45
275 | },
276 | {
277 | "id": 92352352,
278 | "photographerId": 527,
279 | "title": "Portrait Sunkiss",
280 | "image": "Portrait_Sunkissed.jpg",
281 | "likes": 66,
282 | "date": "2018-05-24",
283 | "price": 45
284 | },
285 | {
286 | "id": 34513453,
287 | "photographerId": 527,
288 | "title": "Shaw Potrait",
289 | "image": "Portrait_Shaw.jpg",
290 | "likes": 52,
291 | "date": "2017-04-21",
292 | "price": 45
293 | },
294 | {
295 | "id": 23523533,
296 | "photographerId": 527,
297 | "title": "Alexandra",
298 | "image": "Portrait_Alexandra.jpg",
299 | "likes": 95,
300 | "date": "2018-11-02",
301 | "price": 45
302 | },
303 | {
304 | "id": 525834234,
305 | "photographerId": 527,
306 | "title": "Afternoon Break",
307 | "image": "Portrait_AfternoonBreak.jpg",
308 | "likes": 25,
309 | "date": "2019-01-02",
310 | "price": 45
311 | },
312 |
313 | {
314 | "id": 623534343,
315 | "photographerId": 243,
316 | "title": "Lonesome",
317 | "image": "Travel_Lonesome.jpg",
318 | "likes": 88,
319 | "date": "2019-02-03",
320 | "price": 45
321 | },
322 | {
323 | "id": 625025343,
324 | "photographerId": 243,
325 | "title": "Hillside Color",
326 | "image": "Travel_HillsideColor.jpg",
327 | "likes": 85,
328 | "date": "2019-04-03",
329 | "price": 45
330 | },
331 | {
332 | "id": 2525345343,
333 | "photographerId": 243,
334 | "title": "Wednesday Potrait",
335 | "image": "Portrait_Wednesday.jpg",
336 | "likes": 34,
337 | "date": "2019-04-07",
338 | "price": 45
339 | },
340 | {
341 | "id": 2523434634,
342 | "photographerId": 243,
343 | "title": "Nora Portrait",
344 | "image": "Portrait_Nora.jpg",
345 | "likes": 63,
346 | "date": "2019-04-07",
347 | "price": 45
348 | },
349 | {
350 | "id": 398847109,
351 | "photographerId": 243,
352 | "title": "Raw Black Portrait",
353 | "image": "Portrait_Background.jpg",
354 | "likes": 55,
355 | "date": "2019-06-20",
356 | "price": 45
357 | },
358 | {
359 | "id": 2534342,
360 | "photographerId": 243,
361 | "title": "Seaside Wedding",
362 | "image": "Event_SeasideWedding.jpg",
363 | "likes": 25,
364 | "date": "2019-06-21",
365 | "price": 45
366 | },
367 | {
368 | "id": 65235234,
369 | "photographerId": 243,
370 | "title": "Boulder Wedding",
371 | "image": "Event_PintoWedding.jpg",
372 | "likes": 52,
373 | "date": "2019-06-25",
374 | "price": 45
375 | },
376 | {
377 | "id": 23523434,
378 | "photographerId": 243,
379 | "title": "Benevides Wedding",
380 | "image": "Event_BenevidesWedding.jpg",
381 | "likes": 77,
382 | "date": "2019-06-28",
383 | "price": 45
384 | },
385 | {
386 | "id": 5234343,
387 | "photographerId": 243,
388 | "title": "Wild horses in the mountains",
389 | "video": "Animals_Wild_Horses_in_the_mountains.mp4",
390 | "likes": 142,
391 | "date": "2019-08-23",
392 | "price": 60
393 | },
394 | {
395 | "id": 95234343,
396 | "photographerId": 243,
397 | "title": "Rainbow Bird",
398 | "image": "Animals_Rainbow.jpg",
399 | "likes": 59,
400 | "date": "2019-07-02",
401 | "price": 60
402 | },
403 |
404 | {
405 | "id": 52343416,
406 | "photographerId": 195,
407 | "title": "Japanese Tower, Kyoto",
408 | "image": "Travel_Tower.jpg",
409 | "likes": 25,
410 | "date": "2019-04-03",
411 | "price": 60
412 | },
413 | {
414 | "id": 2523434,
415 | "photographerId": 195,
416 | "title": "Senset on Canals, Venice",
417 | "image": "Travel_SunsetonCanals.jpg",
418 | "likes": 53,
419 | "date": "2019-05-06",
420 | "price": 60
421 | },
422 | {
423 | "id": 95293534,
424 | "photographerId": 195,
425 | "title": "Mountain and Lake",
426 | "image": "Travel_OpenMountain.jpg",
427 | "likes": 33,
428 | "date": "2019-05-12",
429 | "price": 60
430 | },
431 | {
432 | "id": 356234343,
433 | "photographerId": 195,
434 | "title": "City Bike and Stair, Paris",
435 | "image": "Travel_Bike_and_Stair.jpg",
436 | "likes": 53,
437 | "date": "2019-06-20",
438 | "price": 60
439 | },
440 | {
441 | "id": 235234343,
442 | "photographerId": 195,
443 | "title": "Adventure Door, India",
444 | "image": "Travel_Adventure_Door.jpg",
445 | "likes": 63,
446 | "date": "2019-06-26",
447 | "price": 60
448 | },
449 | {
450 | "id": 6234234343,
451 | "photographerId": 195,
452 | "title": "Contrast, St Petersburg",
453 | "image": "Architecture_Contrast.jpg",
454 | "likes": 52,
455 | "date": "2019-06-30",
456 | "price": 60
457 | },
458 | {
459 | "id": 6525666253,
460 | "photographerId": 195,
461 | "title": "On a Hill, Tibet",
462 | "image": "Architecture_On_a_hill.jpg",
463 | "likes": 63,
464 | "date": "2019-07-20",
465 | "price": 60
466 | },
467 | {
468 | "id": 98252523433,
469 | "photographerId": 195,
470 | "title": "Leaning Tower, Pisa",
471 | "image": "Architecture_Dome.jpg",
472 | "likes": 88,
473 | "date": "2020-01-05",
474 | "price": 60
475 | },
476 | {
477 | "id": 9259398453,
478 | "photographerId": 195,
479 | "title": "Drone shot of Buenos Aires highways",
480 | "video": "Architecture_coverr_circle_empty_highway_in_buenos_aires_587740985637.mp4",
481 | "likes": 57,
482 | "date": "2020-01-20",
483 | "price": 65
484 | },
485 | {
486 | "id": 3523523534,
487 | "photographerId": 195,
488 | "title": "Corner Building and Blue Sky",
489 | "image": "Architecture_Corner_Room.jpg",
490 | "likes": 54,
491 | "date": "2020-05-05",
492 | "price": 60
493 | },
494 | {
495 | "id": 952343423,
496 | "photographerId": 930,
497 | "title": "Tricks in te air",
498 | "video": "Sport_Tricks_in_the_air.mp4",
499 | "likes": 150,
500 | "date": "2018-02-30",
501 | "price": 70
502 | },
503 | {
504 | "id": 235234343,
505 | "photographerId": 930,
506 | "title": "Climber",
507 | "image": "Sport_Next_Hold.jpg",
508 | "likes": 101,
509 | "date": "2018-03-05",
510 | "price": 65
511 | },
512 | {
513 | "id": 235343222,
514 | "photographerId": 930,
515 | "title": "Surfer",
516 | "image": "sport_water_tunnel.jpg",
517 | "likes": 103,
518 | "date": "2018-03-10",
519 | "price": 70
520 | },
521 | {
522 | "id": 7775342343,
523 | "photographerId": 930,
524 | "title": "Skier",
525 | "image": "Sport_Sky_Cross.jpg",
526 | "likes": 77,
527 | "date": "2018-04-16",
528 | "price": 50
529 | },
530 | {
531 | "id": 9253445784,
532 | "photographerId": 930,
533 | "title": "Race End",
534 | "image": "Sport_Race_End.jpg",
535 | "likes": 88,
536 | "date": "2018-04-22",
537 | "price": 65
538 | },
539 | {
540 | "id": 22299394,
541 | "photographerId": 930,
542 | "title": "Jump!",
543 | "image": "Sport_Jump.jpg",
544 | "likes": 95,
545 | "date": "2018-04-27",
546 | "price": 70
547 | },
548 | {
549 | "id": 3452342633,
550 | "photographerId": 930,
551 | "title": "White Light",
552 | "image": "Architecture_White_Light.jpg",
553 | "likes": 52,
554 | "date": "2018-05-03",
555 | "price": 75
556 | },
557 | {
558 | "id": 939234243,
559 | "photographerId": 930,
560 | "title": "Water on Modern Building",
561 | "image": "Architecture_Water_on_Modern.jpg",
562 | "likes": 55,
563 | "date": "2018-05-10",
564 | "price": 72
565 | },
566 | {
567 | "id": 222959233,
568 | "photographerId": 930,
569 | "title": "Horseshoe",
570 | "image": "Architecture_Horseshoe.jpg",
571 | "likes": 85,
572 | "date": "2018-05-15",
573 | "price": 71
574 | },
575 | {
576 | "id": 965933434,
577 | "photographerId": 930,
578 | "title": "Cross Bar",
579 | "image": "Architecture_Cross_Bar.jpg",
580 | "likes": 66,
581 | "date": "2018-05-20",
582 | "price": 58
583 | },
584 | {
585 | "id": 777723343,
586 | "photographerId": 930,
587 | "title": "Connected Curves",
588 | "image": "Architecture_Connected_Curves.jpg",
589 | "likes": 79,
590 | "date": "2018-05-21",
591 | "price": 80
592 | }
593 | ]
594 | }
595 |
--------------------------------------------------------------------------------