Skip to content

Instantly share code, notes, and snippets.

@mducharme
Last active June 10, 2019 01:54
Show Gist options
  • Save mducharme/7a1ef0258d66255afc3e2e0a0b55c138 to your computer and use it in GitHub Desktop.
Save mducharme/7a1ef0258d66255afc3e2e0a0b55c138 to your computer and use it in GitHub Desktop.
Hop Loco API Example data

GET api/v1/projects/{projectId}

Pour avoir les détails d'un projet.

{
    "id": "1930c62a-8f49-4f36-82d7-7cdc40930b46",
    "title": "Report.Cards",
    "clientName": "SEAL Swimming",
    "timeline": {
        "file": "uploads/timeline/reportcards.pdf",
        "lastModified": "2019-06-10 10:15:00"
    },
    "startDate": "2019-11-01",
    "launchDate": "2019-05-04"
}
  • Les ressources, tâches, contacts et faqs sont dans des endpoints différents.
  • Est-ce que mainContact est nécessaire? On pourrait également prendre le premier item de projects/{projectId}/contacts
  • Pas de logo ou image?

GET api/v1/projects/{projectId}/milestones

[
  {
    "id": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
    "name": {
      "en": "Strategy",
      "fr": "Stratégie"
    },
    "completion": 100,
    "faq": "176412e7-521c-4891-96ab-cacfcc7c9622",
    "approvalRequired": true,
    "approvalDocuments": [
        "uploads/approvals/report.cards/wireframe.pdf",
        "uploads/approvals/report.cards/moodboard.pdf"
    ],
    "approvalDate": "2019-06-07 15:30:00",
    "approvalUser": "00ebf4b0-df9c-4c3c-84ec-87075dc5b597",
    "approvalSignature": "base64:xxx"
  },
  {
    "id": "",
    "name": {
      "en": "Production",
      "fr": "Production"
    },
    "completion": 75,
    "faq": null,
    "approvalRequired": true,
    "approvalDocuments": null,
    "approvalDate": null,
    "approvalUser": null,
    "approvalSignature": null
  },
  {
    "id": "",
    "name": {
        "en": "Content entry"
    },
    "completion": 0,
    "faq": null,
    "approvalRequired": true,
    "approvalDocuments": null,
    "approvalDate": null,
    "approvalUser": null,
    "approvalSignature": null
  },
  {
    "id": "",
    "name": {
        "en": "Quality Assurance"
    },
    "completion": 0,
    "faq": null,
    "approvalRequired": true,
    "approvalDocuments": null,
    "approvalDate": null,
    "approvalUser": null,
    "approvalSignature": null
  },
  {
    "id": "",
    "name": "Delivery",
    "completion": 0,
    "faq": null,
    "approvalRequired": true,
    "approvalDocuments": null,
    "approvalDate": null,
    "approvalUser": null,
    "approvalSignature": null
  }
]
  • Chaque milestone peut être lié à une question des FAQ. Ainsi lorsqu'on affiche le milestone (par exemple dans le dashboard) on peut cliquer sur son nom pour ouvrir le "popup" des FAQs à la bonne question.
  • Le % de completion est calculé automatiquement à partir du nombre de tâches complétées.

GET api/v1/projects/{projectId}/tasks

[
    {
        "id": "",
        "milestone": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
        "title": {
            "en": "Kick-off meeting",
            "fr": "Meeting kickoff"
        },
        "description": {
            "en": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pharetra consectetur diam sit amet pulvinar. Maecenas ut lacinia dolor metus."
        },
        "owners": ["agency", "client"],
        "faq": null,
        "completed": true,
        "approvalRequired": false,
        "approvalDocuments": null,
        "approvalDate": null,
        "approvalUser": null,
        "approvalSignature": null
    },
    {
        "id": "",
        "milestone": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
        "title": {
            "en": "Hosting strategy"
        },
        "description": {
            "en": ""
        },
        "owners": ["client"],
        "faq": null,
        "completed": true,
        "approvalRequired": false,
        "approvalDocuments": null,
        "approvalDate": null,
        "approvalUser": null,
        "approvalSignature": null
    }
]
  • Chaque tâche doit être associé à un milestone.
  • La description devrait être limitée à 140 caractères.
  • Le owner peut être "client" ou "agency".
  • Chaque tâche peut-être associé à une question du FAQ.
  • Chaque tâche peut être approuvé, et doit l'être si approvalRequired == true.
  • Des resources

GET api/v1/projects/{projectId}/resources

[
    {
        "type": "link",
        "label": {
            "fr": "CMS"
        },
        "faq": "7a022ed4-9f31-4948-8324-67f1c05cc5e7",
        "faqLabel": {
            "en": "What is the CMS?",
            "fr": "Qu'est-ce que le CMS?"
        },
        "resources": [
            {
                "id": "365e0468-9bd4-48ee-b31f-ab6b91062b3f",
                "category": null,
                "milestone": null,
                "url": "https//reportcards.labloco.com/admin",
                "label": null,
                "lastModified": "2018-01-01 00:00:00"
            }
        ]
    },
    {
        "type": "resources",
        "label": {
            "en": "Documentation",
            "fr": "Documentation"
        },
        "faq": null,
        "faqLabel": null,
        "resources": [
            {
                "id": "",
                "category": "483ac9f4-62f2-46d8-bbc8-576ce61e4643 ",
                "milestone": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
                "url": "https://drive.google.com/xxasda",
                "label": {
                    "en": "Initial brief",
                    "fr": "Brief initial"
                }
            },
            {
                "id": "",
                "category": "483ac9f4-62f2-46d8-bbc8-576ce61e4643",
                "milestone": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
                "url": "https://drive.google.com/xxasda",
                "label": {
                    "en": "Meetings debrief",
                    "fr": "Notes de rencontre"
                }
            },
            {
                "id":"",
                "category": "500155a2-9b9d-47b6-b640-0eb554be8fa1",
                "milestone": "73c1dfcb-1159-45f7-90b4-91d0fe775152",
                "url": "https://slickplan.com/aszxc",
                "label": {
                    "en": "Site map"
                }
            }
        ]
    }
]
  • Un array de ResourceBlock, qui ont un array de Resource.
  • Chaque ResourceBlock a un type (link ou resources)
  • Chaque ResourceBlock peut aussi être lié à une question du FAQ.
  • Chaque resource peut avoir un milestone optionnel.
  • Chaque resource peut être dans une catégorie (ex: Google Drive, Sketch) qui contient l'icone à
  • Devrait-on planifier plusiers types de Resource? (ex: URL, integration, etc ou ça peut être managed par la catégorie?)
  • Si le label du resource est vide, on utilise le URL comme label.

GET api/v1/projects/{projectId}/contacts

[
    {
        "id": "e32dc7d1-46bc-4a91-b531-254551c3532b",
        "name": "Geneviève Levert",
        "icon": "uploads/emoji/gen.png",
        "title": "Project Manager",
        "email": "genevieve@locomotive.ca",
        "phone": "+1 (514) 524-5678 #6"
    },
    {
        "id": "efc9737c-144e-417b-85cd-9633045cd64b",
        "name": "Mathieu Ducharme",
        "icon": "uploads/emoji/mat.png",
        "title": "Technical Director",
        "email": "mat@locomtoive.ca",
        "phone": "+1 (514) 524-5678 #4"
    }
]
  • Les premiers design catégorisaient les contacts par bloc; à voir si on ajoute ou non cette fonctionnalité.

GET api/v1/resource-categories

Liste des catégories de ressources

[
    {
        "id": "483ac9f4-62f2-46d8-bbc8-576ce61e4643",
        "name": {
            "en": "Google drive"
        },
        "icon": "uploads/categories/google-drive.svg",
        "faq": null
    },
    {
        "id": "500155a2-9b9d-47b6-b640-0eb554be8fa1",
        "name": {
            "en": "Slick plan"
        },
        "icon": "uploads/categories/slick-plan.svg",
        "faq": null
    }
]
  • Chaque catégorie peut avoir son icone. Est-ce que ce devrait juste etre un #ref a un spritemap?
  • Chaque catégorie peut être lié à une question du FAQ.

GET api/v1/projects/{projectId}/faqs

[
    {
        "id": "",
        "question": {
            "en": "What is the CMS"
        },
        "answer": {
            "en": "Baby don't hur me"
        },
        "lastUpdated": "2019-03-04 05:06:07"
    }
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment