Voting Tool: Unterschied zwischen den Versionen

Aus Java Student User Group Austria - Java + JVM in Wien Österreich / Vienna Austria
Wechseln zu: Navigation, Suche
(Protocol)
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<p align="center" style="font-size:20pt;padding-top:10px;padding-bottom:15px;">[http://jsugvoting.at.tt/ http://jsugvoting.at.tt/]</p>
+
<!--<p align="center" style="font-size:22pt;padding-top:10px;padding-bottom:15px;">[http://jsugvoting.at.tt http://jsugvoting.at.tt]<span style="font-size:8pt;bold;color:#999999;">&nbsp;&nbsp;&nbsp;Beta v0.4</span></p>-->
  
This site contains a short overview of the JSUG Voting tool hosted at [http://code.google.com/p/jsugvoting/ googlecode]. The client is written with Adobe Flex and the backend is written in PHP using MySQL as its dbms.
+
This site contains a short overview of the JSUG Voting Tool hosted at [http://code.google.com/p/jsugvoting/ googlecode]. Its aim is to provide an easy way figuring out which topics are preferred by the members.
  
==Sources==
+
__TOC__
 +
 
 +
=General=
 +
==Technologies used==
 +
 
 +
* GWT 1.5.3
 +
* RESTful Webservices
 +
* PHP 5
 +
 
 +
 
 +
==Access Sourcecode==
  
 
You can check out the full source code by:
 
You can check out the full source code by:
 
<code>
 
<code>
  # Non-members may check out a read-only working copy anonymously over HTTP.
+
# anonymous read-only access:
  svn checkout http://jsugvoting.googlecode.com/svn/jsugvoting-read-only  
+
  svn checkout <nowiki>http://jsugvoting.googlecode.com/svn/</nowiki> jsugvoting-read-only  
 +
 +
# project members only:
 +
svn checkout <nowiki>https://jsugvoting.googlecode.com/svn/trunk/</nowiki> jsugvoting --username <your_name>
 
</code>
 
</code>
  
Or just browse it via the url: [http://code.google.com/p/jsugvoting/source/browse/#svn/v1 http://code.google.com/p/jsugvoting/source/browse/]
+
=Technical Documentation=
  
==Technologies==
+
... kind of ...
<!-- schaut komisch aus ... [[Bild:JsugVoting_FrontendScreenshot.png|thumb|Frontend Sources]]
 
[[Bild:JsugVoting_BackendScreenshot.png|thumb|Backend Sources]]-->
 
  
===Flex Frontend===
+
==Usecases==
  
* Flex SDK 3.2
+
* Anonym
* FlexBuilder 3.0.2
+
** View Topics
* Cairngorm 2
+
** Register
* as3corelib
+
** Login
* as3logger
+
* Member
 +
** Logout
 +
** Vote
 +
** Unvote
 +
** Request Talk
 +
** Offer Talk
 +
** Join Talk
 +
* ''Admin''
 +
** Edit Topic
  
===PHP Backend===
+
=== Commands/Events ===
  
* PHP 5.2
+
* ??? ReloadData
* MySQL 4.1 (requires extension <code>pdo_mysql</code>)
+
* Register
* PDO database abstraction layer
+
* Login
* SimpleXML parser
+
* Logout
* FrontController & RequestDispatcher
+
* GiveVote
 +
* RevokeVote
 +
* RequestTalk
 +
* OfferTalk
 +
* JoinTalk
  
==Requirements==
+
== Valueobjects==
  
===Mandatory===
+
* TalkEntity
 +
** id: long
 +
** createdOn: timestamp
 +
** createdBy: User
 +
** title: String
 +
** votes: Vote[]
 +
** tags: Tag[]
 +
** detail: String
 +
** link: String // LUXURY // about topic itself
 +
** thumbnail: image // LUXURY
 +
** state: Enum {need | offer | next | past}
 +
** attribute1: String // attributes are state depending (?)
 +
** attribute2: String
 +
** attribute3: String
 +
** attribute4: String
  
* <span style="text-decoration:line-through;">Login/Logout</span>
+
* VoteEntity
* <span style="text-decoration:line-through;">View topics</span>
+
** topicId: long
* View topic detail  ''... do we actually want to? e.g. creation date, needed topic creator''
+
** userId: long
* <span style="text-decoration:line-through;">Add topic</span>
+
** createdOn: timestamp
* <span style="text-decoration:line-through;">Submit vote</span>
 
  
===Nice to Have===
+
* <span style="text-decoration:line-through;">UserEntity</span>
 +
** id: long
 +
** createdOn: timestamp
 +
** username: String
 +
** password: String // SHA-1 encrypted
 +
** email: String
  
* Vote button for each GridRow (instead of two misplaced buttons)
+
* Tag
* Custom tree icon
+
** id: long
* Nice transitions for login/main-state ''... partly done''
+
** word: String
* Search (with continuous filtering)
 
* Resolve neededTopicsAdvancedDataGridHack (assign value instead of manipulating internals)
 
  
===Luxury===
 
  
* "Leave comment"-Link (kind of feedback form)
+
==Protocol==
* Plug into existing wiki-users instead of storing separate user data
 
  
===Do we want?===
+
* describes passed json/xml dataformats
 +
* mimetypes:
 +
** application/json
 +
** application/xml
  
Some of these features could be provided as prewritten SQL statements, which one would have to execute via e.g. phpMyAdmin.
+
===Overview===
  
* Edit topic detail: title, offeredBy/Category
+
* Request
* Revoke vote
+
** Head
* Create/Edit category
+
*** Message Version; e.g. "0.1"
* Rearrange default order
+
*** Message Code (unique for this request/response); e.g. "7"
 +
*** Status Code
 +
** Body
 +
*** ...
  
 +
===Talk===
  
==Data Model==
+
GET: /users; response:
  
 
<code>
 
<code>
  +====================================================+
+
  [
| user                                              |
+
    {
+====================================================+
+
      Id: 1,
| *) user_id: INTEGER, PRIMARY KEY                  |
+
      Username: "foo"
| *) username: VARCHAR(80)                          |
+
    },
| *) password: VARCHAR(80)                          |
+
    {
+----------------------------------------------------+
+
      Id: 2,
+
      Username: "bar"
+====================================================+
+
    }
| category                                          |
+
  ]
+====================================================+
 
|                                                    |
 
| *) category_id: INTEGER, PRIMARY KEY              |
 
| *) title: VARCHAR(255)                            |
 
|                                                    |
 
+----------------------------------------------------+
 
 
+====================================================+
 
| topic                                              |
 
+====================================================+
 
| *) topic_id: INTEGER, PRIMARY KEY                  |
 
| *) title: VARCHAR(255)                            |
 
+----------------------------------------------------+
 
 
+====================================================+
 
| offered_topic                                      |
 
+====================================================+
 
| *) offered_topic_id: INTEGER, PRIMARY KEY          |
 
| *) topic_id: INTEGER, REF(topic.topic_id)          |
 
| *) user_id: INTEGER, REF(user.user_id)            |
 
+----------------------------------------------------+
 
 
+====================================================+
 
| needed_topic                                      |
 
+====================================================+
 
| *) needed_topic_id: INTEGER, PRIMARY KEY          |
 
| *) topic_id: INTEGER, REF(topic.topic_id)          |
 
| *) category_id: INTEGER, REF(category.category_id) |
 
+----------------------------------------------------+
 
 
+====================================================+
 
| vote                                              |
 
+====================================================+
 
| *) user_id: INTEGER, REF(user.user_id)            |
 
| *) topic_id: INTEGER, REF(topic.topic_id)          |
 
  +----------------------------------------------------+
 
 
</code>
 
</code>
  
==Screenshots==
+
== REST ==
 +
 
 +
* /session ... von REST vordefined
 +
** GET: X
 +
** PUT: X
 +
** POST: login
 +
** DELETE: logout
 +
* /users
 +
** GET: list all users
 +
** PUT: X
 +
** POST: register new user
 +
** DELETE: X
 +
* /talks
 +
** GET: list all talks
 +
** PUT: X
 +
** POST: new talk
 +
** DELETE: X
 +
* /talks/{talkId}
 +
** GET: X (evtl: display talk)
 +
** PUT: X
 +
** POST: X
 +
** DELETE: X (admin: delete talk)
 +
* /talks/{talkId}/speakers
 +
** GET: X
 +
** PUT: X
 +
** POST: join that talk
 +
** DELETE: delete yourself
 +
* /talks/{talkId}/vote
 +
** GET: X (evtl: returned true/false if yet voted)
 +
** PUT: X
 +
** POST: add vote
 +
** DELETE: unvote
 +
 
 +
== Service API ==
 +
 
 +
* AuthService
 +
** login(username: String, password: String): boolean
 +
** logout(): void
 +
** register(username: String, password: String, email: String): boolean
 +
* TopicsService
 +
** ...
  
[[Bild:Screenshot-JsugVotingTool1.png|center|Screenshot1]]
+
[[Category:Project]]
[[Bild:Screenshot-JsugVotingTool2.png|center|Screenshot2]]
+
[[Category:JsugTool]]

Aktuelle Version vom 23. März 2009, 17:12 Uhr


This site contains a short overview of the JSUG Voting Tool hosted at googlecode. Its aim is to provide an easy way figuring out which topics are preferred by the members.

General

Technologies used

  • GWT 1.5.3
  • RESTful Webservices
  • PHP 5


Access Sourcecode

You can check out the full source code by:

# anonymous read-only access:
svn checkout http://jsugvoting.googlecode.com/svn/ jsugvoting-read-only 

# project members only:
svn checkout https://jsugvoting.googlecode.com/svn/trunk/ jsugvoting --username <your_name>

Technical Documentation

... kind of ...

Usecases

  • Anonym
    • View Topics
    • Register
    • Login
  • Member
    • Logout
    • Vote
    • Unvote
    • Request Talk
    • Offer Talk
    • Join Talk
  • Admin
    • Edit Topic

Commands/Events

  •  ??? ReloadData
  • Register
  • Login
  • Logout
  • GiveVote
  • RevokeVote
  • RequestTalk
  • OfferTalk
  • JoinTalk

Valueobjects

  • TalkEntity
    • id: long
    • createdOn: timestamp
    • createdBy: User
    • title: String
    • votes: Vote[]
    • tags: Tag[]
    • detail: String
    • link: String // LUXURY // about topic itself
    • thumbnail: image // LUXURY
    • state: Enum {need | offer | next | past}
    • attribute1: String // attributes are state depending (?)
    • attribute2: String
    • attribute3: String
    • attribute4: String
  • VoteEntity
    • topicId: long
    • userId: long
    • createdOn: timestamp
  • UserEntity
    • id: long
    • createdOn: timestamp
    • username: String
    • password: String // SHA-1 encrypted
    • email: String
  • Tag
    • id: long
    • word: String


Protocol

  • describes passed json/xml dataformats
  • mimetypes:
    • application/json
    • application/xml

Overview

  • Request
    • Head
      • Message Version; e.g. "0.1"
      • Message Code (unique for this request/response); e.g. "7"
      • Status Code
    • Body
      • ...

Talk

GET: /users; response:

[
   {
     Id: 1,
     Username: "foo"
   },
   {
     Id: 2,
     Username: "bar"
   }
]

REST

  • /session ... von REST vordefined
    • GET: X
    • PUT: X
    • POST: login
    • DELETE: logout
  • /users
    • GET: list all users
    • PUT: X
    • POST: register new user
    • DELETE: X
  • /talks
    • GET: list all talks
    • PUT: X
    • POST: new talk
    • DELETE: X
  • /talks/{talkId}
    • GET: X (evtl: display talk)
    • PUT: X
    • POST: X
    • DELETE: X (admin: delete talk)
  • /talks/{talkId}/speakers
    • GET: X
    • PUT: X
    • POST: join that talk
    • DELETE: delete yourself
  • /talks/{talkId}/vote
    • GET: X (evtl: returned true/false if yet voted)
    • PUT: X
    • POST: add vote
    • DELETE: unvote

Service API

  • AuthService
    • login(username: String, password: String): boolean
    • logout(): void
    • register(username: String, password: String, email: String): boolean
  • TopicsService
    • ...