Giter VIP home page Giter VIP logo

touricity-server's People

Contributors

batuhanulucay avatar beyzanrgenc avatar furkandinc avatar ykakdas avatar

Stargazers

 avatar

Watchers

 avatar  avatar

touricity-server's Issues

Heroku Database kurulması

Database heroku database sunucularında tutulacak ve heroku database linkleri sunucuya parametre olarak verilecek

Register kontrolcüsü yazılacaktır

Kayıt olma kontrolcüsü aşağıdaki maddelere uygun oluşturulacaktır.

  • Session id olmadan işlem yapılmayacaktır
  • "/register" adresinde kontrolcü oluşturulacaktır
  • Kayıt yapma işlemi başarılı olursa otomatik var olan session ile login olacaktır
  • Herhangi bir hata oluştuğunda kullanıcıya bildirilecektir
  • Mock arayüzüne eklenecektir
{
   username:<String>,
   password:<String>
}
  • Cevap olarak onay veya hata mesajı dönecektir

Generic hata kontrolcüsü yazılacaktır

IMessage interface'inden türetilmiş hata kontrolcüsü yazılacaktır. Hataların kodları kategorilere 100, 200, 300 başlangıç numaraları ile ayrılacaktır.

  • İki adet attribute içermelidir
  • Mock arayüzüne eklenmelidir, her hatanın kodu ve örnek mesajı kullanıcıya gönderilmelidir
{
    code:       <Integer>,
    message:    <String>
}

Temel mesaj tiplerinin mock arayüzü

Gelen json isteklerine hangi json sınıfları ile cevap döndürüleceğini simüle eden bir mock arayüzü oluşturulacaktır. Burada oluşturulan örnek mesajlar anlamlı olmalıdır. Fakat geçerliliği olmamalıdır. Yani herhangi bir id/username'nin database'te bir karşılığı olmamalıdır. Aşağıda hangi yoldan nasıl bir cevap alabileceğinin örneği verilmiştir.

/mock

  • var olan mock arayüzlerinin path listesini döner
  • örnek { Stop: "/mock/stop", Path: "/mock/path" ... }

/mock/stop

  • anlamlı bir stop sınıfına uygun mesaj döndürülür
  • örnek { stop_id: "c09fc4c0-cee5-4ce7-bf35-448917e7d8e9", location_id: "5c0ca3bb-638d-41ef-8e36-53a5b113d044" }

Ek özellik olarak ?random=true ise mesajların içerikleri rastgele oluşturulacaktır. Stringler için database'te tanımlı maksimum boyuta göre sınırlandırılacaktır.
/mock/stop?random=true

  • örnek { stop_id: "47x474bcfpIEDWthjjskpclGFLVeXHTsR6qt", location_id: "8wPRFeBkfNGo6F6KMv6k5jWnm3SK0Fsj7BTY" }

Login/logout kontrolcüsü yazılacaktır

Login ve logout işlemlerinin gerçekleştirileceği kontrolcünün gereksinimleri aşağıda belirtilmiştir.

Login işlemi için var olan session id için login işlemi yapılacaktır.

  • "/login" adresine sahip kontrolcü açılmalıdır
  • Session id olmadan işlem yapmamalıdır
  • Eski sessionlardaki login durumu kaybolmamalıdır
  • Var olan session id değişmemelidir
  • Var olan session başka bir hesaba login durumundaysa, diğer hesaptan çıkış yapıp yeni hesaba giriş yapmalıdır
  • Var olan session giriş yapmış olduğu hesaba yeniden giriş yapmaya çalışıyorsa bir üstteki madde geçerlidir
  • Kullanıcı adı ve şifre yanlışsa hata mesajı döndürmelidir
  • Mock arayüzüne eklenmelidir
// örnek login isteği
{
    username:    <String>,
    password:    <String>
}

Logout için boş bir istek göndermek kullanıcıyı çıkış yaptırmalıdır

  • "/logout" adresine sahip kontrolcü açılmalıdır
  • Session id olmadan işlem yapmamalıdır
  • Var olan session giriş yapmışsa çıkış işlemi gerçekleşir
  • Var olan session giriş yapmamışsa hata mesajı döndürülür
  • Mock arayüzüne eklenmelidir
// örnek logout isteği
{
// boş olabilir, attributelar önemsenmeyecektir
}

Bu iki isteğe de cevap olarak onay veya hata mesajları dönülecektir

Database güncellemesi

Şehir tablosu eklenecektir

  • city_id
  • name

Route tablosu güncellenecektir

  • city_id
  • title <String : max 70>
  • description <String : max 1000>
  • secret

Lokasyon tablosu güncellenecektir

  • city_id

Database güncellemesi sonrasında yapılacaklar

  • Eklenen tablo ve sütun isimleri database sınıfına eklenecektir
  • Şehir sınıfı oluşturulacaktır
  • route ve lokasyon sınıfları güncellenecektir
  • şehir ismi getirme kontrolcüsü yazılacaktır

Lokasyona yorum yazma kontrolcüsü yazılacaktır

Bir kullanıcının var olan bir lokasyona yorum yazabilmesini sağlayan kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılmaz
  • Kullanıcı giriş yapmamışsa yorum yapamaz
  • Gelen isteğe cevap olarak işlem başarılı ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// request şablonu
{
  location_id: <String>,
  comment_dec: <String>
}

Route güncelleme kontrolcüsü yazılacaktır

Rotayı güncelleme işlemi yapan kontrolcü yazılacaktır. Hem rota oluşturma hem de rota güncelleme işlemlerini gerçekleştirebilecektir. Aşağıdaki maddelere uygun hazırlanacaktır.

  • Sesion id olmadan işlem yapılmaz
  • Kullanıcının giriş yapmasına gerek yoktur fakat güncellenmek istenen rota başka bir kullanıcıya ait ise giriş yapması gerekmektedir
  • Gelen istekteki id bölümü null ise yeni rota oluşturulur
  • Gelen istekteki id bölümü null değilse var olan rota ile karşılaştırma yapılır ve farklı olan kısımlar güncellenir
  • Entrylerin için null olan id'ler için yeni entry'ler oluşturulur
  • Cevap olarak rotanın tam hali kullanıcıya gönderilir
  • Eğer hata varsa kullanıcıya hata mesajı gönderilir

Lokasyonu like etme kontrolcüsü yazılacaktır

Bir kullanıcının var olan bir lokasyonu like edebilmesini sağlayan kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılmaz
  • Kullanıcı giriş yapmamışsa like yapamaz
  • Gelen isteğe cevap olarak işlem başarılı ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// request şablonu
{
  location_id: <String>,
  score: <Integer>
}

Database oluşturma sql dosyaları oluşturulacak

Sadece create table işlemlerinin bulunduğu bir sql dosyası bulunacak.
Tanımlanan veritabanı modelinde bulunan aşağıdaki sınıflar yazılacaktır.
ACOUNT:

  • account_id

USER:

  • account_id -> account_id in ACCOUNT
  • username
  • password

SESSION:

  • account_id -> account_id in ACCOUNT
  • session_id

ROUTE:

  • creator ->account_id in ACCOUNT
  • route_id

ENTRY:

  • route_id -> route_id in ROUTE
  • stop_id -> stop_id in STOP : null olabilir
  • path_id -> path_id in PATH : null olabilir
  • entry_id
  • expense
  • duration
  • comment

PATH:

  • path_id
  • path_type
  • vertices

STOP:

  • location_id -> location_id in LOCATION
  • stop_id

LOCATION:

  • location_id
  • latitude
  • longitude

LIKE:

  • account_id -> account_id in ACCOUNT
  • like_id
  • score

COMMENT:

  • account_id -> account_id in ACCOUNT
  • comment_id
  • comment

LOCATION-LIKE:

  • location_id -> location_id in LOCATION
  • like_id -> like_id in LIKE

LOCATION-COMMENT:

  • location_id -> location_id in LOCATION
  • comment_id -> comment_id in COMMENT

ROUTE-LIKE:

  • route_id -> route_id in ROUTE
  • like_id -> like_id in LIKE

ROUTE-COMMENT:

  • route_id -> route_id in ROUTE
  • comment_id -> comment_id in COMMENT

Like bilgisi getiren kontrolcü yazılacaktır

Like bilgisini gönderen kontrolcü oluşturulacaktır

  • Session id olmadan işlem yapılmaz
  • Gelen isteğe cevap olarak like bilgisi ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// request şablonu
{
  like_id: <String>
}
// response şablonu
{
  like_id: <String>,
  account_id: <String>,
  score: <Integer>
}

Route silme kontrolcüsü yazılacaktır

Gelen route id'ye sahip olan route'un silinmesini sağlayan kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılamaz
  • route giriş yapmış kullanıcıya ait ise giriş yapmak zorunludur ve kullanıcı sadece kendi route'unu silebilir
  • eğer route giriş yapmamış bir kullanıcıya aitse sadece route'u oluşturan session route'u silebilir
  • Yanıt olarak işlem başarılı ya da başarısız cevabı verilir
// request şablonu
{
  route_id: <String>
}

Generic database query altyapısı oluşturulacak.

Database'e gönderilecek query'lerin interfacelerinin hazırlanması.

QueryResult

  • ResultSet getResultSet()
  • bool isSuccessfull()

ISingleQuery

  • String getQuery()
  • void onError(String e)
  • bool onResult(QueryResult result)
  • ExecutionType getExecutionType()

IPipelinedQuery:

  • Queue getQueries()

Veritabanında tutulacak nesnelerin oluşturulması

Aşağıdaki hiyerarşiye uygun şekilde sınıflar oluşturularacaktır
Location implements ILocation
Route implements IRoute
Abstract Entry implements IEntry
Path extends Entry implements IPath
Stop extends Entry implements IStop

Rotaya yorum yazma kontrolcüsü yazılacaktır

Bir kullanıcının başka kullanıcının oluşturmuş olduğu rotaya yorum yapabilmesini sağlayan kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılmaz
  • Kullanıcı giriş yapamışsa yorum yapamaz
  • Gelen isteğe cevap olarak işlem başarılı ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// request şablonu
{
  route_id: <String>,
  comment_dec: <String>
}

Route bilgisi getiren kontrolcü yazılacaktır

Var olan bir lokasyonun bilgilerini getiren kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılmaz
  • Gelen isteğe cevap olarak route bilgisi ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// response şablonu
{
  route_id: <String>,
  creator: <String>,
  entries: [Array of T(Stop or Path)],
  likes: [StringArray],
  comments: [StringArray]
}

Cookie kontrolcüsü yazılacaktır

Her bir session'nın ayrı ayrı işlem yapabilmesi için bir cookie kontrolcüsü yapacaktır. Bu modülün amacı session id isteğinde bulunan cihazlara session id sağlamak ve herhangi bir işlem sırasında gelen session id'lerin valid olup olmadığını tespit edip kullanıcıya bildirmek.

Route'u like etme kontrolcüsü yazılacaktır

Bir kullanıcının başka kullanıcının oluşturmuş olduğu rotayı like edebilmesini sağlayan kontrolcü oluşturulacaktır.

  • Session id olmadan işlem yapılmaz
  • Kullanıcı giriş yapmamışsa like yapamaz
  • Gelen isteğe cevap olarak işlem başarılı ya da işlem başarısız cevabı döndürülür
  • Mock arayüzü oluşturulacaktır
// request şablonu
{
  route_id: <String>,
  score: <Integer>
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.