-
Notifications
You must be signed in to change notification settings - Fork 0
Description
MVP Grada.me
Реално, най-полезното нещо, което може да направим един приятен mapping app. С добра документация и лесен начин за конфигурация ще може да се преизползва.
Може да се преизползва и да не е само едно приложение за, а и "app за местата за рециклиране около теб", "app за подаване на ралзични видове сигнали (не само градски)", и всякакъв вид друг граждански mapping. Има започнат проект за мапинг на незаконни постройки в резервати. App-а ти казва "Хей, ти си в резерват, има ли около теб постройки - пробвай да провериш дали са легални".
Главна функционалност
-
Submit-ваш снимка/снимки/видеа (каквото изберем), заедно с координати и категория (списък взет от сървъра), опционално описание.
Първото нещо, което ще добавим след MVP версията е: след въведени категория и адрес да се прави проверка дали има вече близки по локация (пример в радиус от 10 метра) други сигнали от същата категория.
-
Позволяваме на хората ползващи този апп да казват "И за мен това е важно." Това е един вид, както често ние разработчиците казваме, "+1" за някой проблем в github. Когато човек го натисне се увеличава броя хора, които смятат, че този проблем е важен. В същото време този бутон действа като "follow"/"favourite" и абонира човека за промени по сигнала като ще получава notifications, когато сигнала е
SUBMITTED | ACCEPTED | REJECTED | IN PROGRESS | REJECTED | FIXED | FIXED BADLY | FAILED. Но wording-a тук е важен да бъде в духа на "+1 И за мен е важно", за да не почнат хората наред да го натискат като like.Веднъж щом сигналът е маркиран като оправен, този бутон изчезва и го замества въпрос (в момента не можем да си представим къде ще е и в какъв widget). Въпросът ще е "Оправен ли е сигнала?" с опции
Да,Не,Некачествено оправен -
В админа на grada.me, което в началото ще е web-only generated admin трябва да имаме потребители с различни права (owner, collaborator, responsible institution.), които могат да сменят статута на сигнала/мястото и да назначават отговорни за репаването му други потребители. Статуси:
SUBMITTED | ACCEPTED | REJECTED | IN PROGRESS | REJECTED | FIXED | FIXED BADLY | FAILEDТова е важно, за да може администрацията и други участници да видят, че е мислено и за тях. Не просто да се спамят.
Планирани бъдещи опции
Хубаво е да се има предвид, че след MVP-то ще се доработят следните неща:
- След въведени категория и адрес да се прави проверка дали има вече близки по локация (пример в радиус от 10 метра) други сигнали от същата категория.
- Филтрация по различни критерии примери: сигнали около теб, сигнали от даден тип (дупки примерно), сигнали от даден state (пример: оправени сигнали). Има мокъпи за мобилното. Ето пример от уеб:

- Позволяваме на хората да коментират и да пожелаят сами да се заемат с оправянето на проблем. Аналогията отново с 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_...
}