Skip to content

Спецификация #2

@antitoxic

Description

@antitoxic

MVP Grada.me

Реално, най-полезното нещо, което може да направим един приятен mapping app. С добра документация и лесен начин за конфигурация ще може да се преизползва.

Може да се преизползва и да не е само едно приложение за, а и "app за местата за рециклиране около теб", "app за подаване на ралзични видове сигнали (не само градски)", и всякакъв вид друг граждански mapping. Има започнат проект за мапинг на незаконни постройки в резервати. App-а ти казва "Хей, ти си в резерват, има ли около теб постройки - пробвай да провериш дали са легални".

Главна функционалност

  1. Submit-ваш снимка/снимки/видеа (каквото изберем), заедно с координати и категория (списък взет от сървъра), опционално описание.

    Първото нещо, което ще добавим след MVP версията е: след въведени категория и адрес да се прави проверка дали има вече близки по локация (пример в радиус от 10 метра) други сигнали от същата категория.

  2. Позволяваме на хората ползващи този апп да казват "И за мен това е важно." Това е един вид, както често ние разработчиците казваме, "+1" за някой проблем в github. Когато човек го натисне се увеличава броя хора, които смятат, че този проблем е важен. В същото време този бутон действа като "follow"/"favourite" и абонира човека за промени по сигнала като ще получава notifications, когато сигнала е SUBMITTED | ACCEPTED | REJECTED | IN PROGRESS | REJECTED | FIXED | FIXED BADLY | FAILED. Но wording-a тук е важен да бъде в духа на "+1 И за мен е важно", за да не почнат хората наред да го натискат като like.

    Веднъж щом сигналът е маркиран като оправен, този бутон изчезва и го замества въпрос (в момента не можем да си представим къде ще е и в какъв widget). Въпросът ще е "Оправен ли е сигнала?" с опции Да, Не, Некачествено оправен

  3. В админа на grada.me, което в началото ще е web-only generated admin трябва да имаме потребители с различни права (owner, collaborator, responsible institution.), които могат да сменят статута на сигнала/мястото и да назначават отговорни за репаването му други потребители. Статуси: SUBMITTED | ACCEPTED | REJECTED | IN PROGRESS | REJECTED | FIXED | FIXED BADLY | FAILEDТова е важно, за да може администрацията и други участници да видят, че е мислено и за тях. Не просто да се спамят.

Планирани бъдещи опции

Хубаво е да се има предвид, че след MVP-то ще се доработят следните неща:

  • След въведени категория и адрес да се прави проверка дали има вече близки по локация (пример в радиус от 10 метра) други сигнали от същата категория.
  • Филтрация по различни критерии примери: сигнали около теб, сигнали от даден тип (дупки примерно), сигнали от даден state (пример: оправени сигнали). Има мокъпи за мобилното. Ето пример от уеб:
    3c6cd42a3d713ebd509ec336958f76ea53c1c250d51b5ed175 pimgpsh_fullsize_distr
  • Позволяваме на хората да коментират и да пожелаят сами да се заемат с оправянето на проблем. Аналогията отново с github е Self-assign - АЗ ЩЕ ГО ОПРАВЯ!
  • Когато човек се самоназначи или още преди това, според типа на сигнала (замърсяване на зел. площи, счупена лампа, разместени плочки) им предлагаме инфо/howto наръчник какво е нужно, за да го направят. Често за дадена задача - примерно подобряване на междублоково пространство има някой задължителни неща. Да речем че се иска да се постави люлка, за това е нужно да се провери дали има кабели близко до земята на същото място, дали няма планирани работи от общината и тн.
  • Възможност за администрацията да назначават даден потребител/организация като отговорен за даден проблем
  • Възможност да се докладва за трол/спам/фълшив потребител

API описание

Следното описание е непълно. Липсват описания на някой заявки, а други описани са непълни. Все пак е полезно четиво, за да се добие обща представа:

https://docs.google.com/document/d/1yAE_LeDqpvhx6_sGtPVowIVFDzd3ZEkiRiO_4UDMlLg/edit#

Примерен модел

В pseudo code:

Mappable: {
  id: Number,
  type: String,
  createdBy: User,
  assignedTo: [User, User, User],
  subscribed: [{User, User, User...}]
  status: Status,
  description: String, 
  location: GeoIndexedField,
  address: String,
  images: [Image,Image,Image],
  video: String, // link to youtube upload
  dateCreated: { type: Date, default: Date.now },
  dueDate: Date,
  activityLog: [{
    dateTime: Date,
    activityType : String,
    from : User,
    changes : [{},]
  }],
  comments: [],
}

User: {
  name: String,
  email: String,
  password: String,
  validated: String,
  date_created: { type: Date, default: Date.now },
  date_updated: { type: Date },
  photo: Image,
  role: Role, // municipality, user, moderator, admin, organisation
  token: {type: Object},
  //For reset we use a reset token with an expiry (which must be checked)
  reset_token: {type: String},
  reset_token_expires_millis: {type: Number},
  facebook_fields..
  twitter_fields...
  google_fields_...
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions