// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Account.java
// @Vetoed //CDI対象外
// @Entity
// @NamedQueries({
//     @NamedQuery(name = "Account.nameOrEmali", query = "select a from Account a where a.name = :name or a.email = :email")
//     , @NamedQuery(name = "Account.byToken", query="select a from Account a where a.token = :token")}
// )
// @Table(uniqueConstraints = @UniqueConstraint(columnNames = {"name", "email"}))
// public class Account implements Serializable{
//     
//     @NotNull(message = "{required}")
//     @Size(message = "{required}", min = 1) // 未入力の場合、空文字になるため。
//     @Id
//     @Column(length = 40)
//     private String name;
//     
//     @Email(message = "{email.invalid}")
//     @NotNull(message = "{required}")
//     @Size(message = "{required}", min = 1)
//     @Column(length = 200, nullable = false)
//     private String email;
//     
//     @Column(length = 32, nullable = true )
//     private String gravaterHash;
//     
//     @Column(length = 40, nullable = true )
//     private String token;
//     
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public String getGravaterHash() {
//         return gravaterHash;
//     }
// 
//     public void setGravaterHash(String gravaterHash) {
//         this.gravaterHash = gravaterHash;
//     }
//     
//     public String getGravatar() {
//         return "https://www.gravatar.com/avatar/" + gravaterHash;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public void setToken(String token) {
//         this.token = token;
//     }
// }
// 
// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Chat.java
// @Vetoed //CDI対象外
// @Entity
// public class Chat implements Serializable {
//     
//     /** id(自動生成) */
//     @Id
//     @GeneratedValue // ID自動生成 
//     private long id;
//     
//     /** チャットを行ったチャットルーム */
//     @ManyToOne // 多対1関連
//     private Room room;
//     
//     /** 発言者 */
//     @ManyToOne
//     private Account speaker;
//     
//     /** 内容 */
//     @Column(length = 200, nullable = false)
//     private String content;
// 
//     /** 投稿時刻 */
//     @Column(nullable = false)
//     private Timestamp posted;
//     
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public Room getRoom() {
//         return room;
//     }
// 
//     public void setRoom(Room room) {
//         this.room = room;
//     }
// 
//     public String getContent() {
//         return content;
//     }
// 
//     public void setContent(String content) {
//         this.content = content;
//     }
// 
//     public Account getSpeaker() {
//         return speaker;
//     }
// 
//     public void setSpeaker(Account speaker) {
//         this.speaker = speaker;
//     }
// 
//     public Timestamp getPosted() {
//         return posted;
//     }
// 
//     public void setPosted(Timestamp posted) {
//         this.posted = posted;
//     }
//     
//     
// }
// 
// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Room.java
// @Vetoed //CDI対象外
// @XmlRootElement
// @Entity
// @NamedQueries(@NamedQuery(name = "Room.all", query = "select r from Room r order by r.id"))
// public class Room implements Serializable {
//     
//     /** id(自動生成) */
//     @Id
//     @GeneratedValue
//     private long id;
//     
//     /** 部屋名 */
//     @Column(nullable = false, length = 40, unique = true)
//     private String name;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
//     
//     
// }


import enterprisegeeks.entity.Account;
import enterprisegeeks.entity.Chat;
import enterprisegeeks.entity.Room;
import java.sql.Timestamp;
import java.util.List;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package enterprisegeeks.service;


/**
 * 永続層周りの機能を提供
 */
public interface Service{
    
    
    public boolean registerAccount(Account accout);
    
    public Account findAccountByName(String name);
    
    /** ログイン用トークン発行 */
    public String publishToken(Account account);
    
    /** チャットルーム一覧 */
    public List<Room> allRooms();
    
    /** チャットルームのチャット一覧を取得 */
// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Account.java
// @Vetoed //CDI対象外
// @Entity
// @NamedQueries({
//     @NamedQuery(name = "Account.nameOrEmali", query = "select a from Account a where a.name = :name or a.email = :email")
//     , @NamedQuery(name = "Account.byToken", query="select a from Account a where a.token = :token")}
// )
// @Table(uniqueConstraints = @UniqueConstraint(columnNames = {"name", "email"}))
// public class Account implements Serializable{
//     
//     @NotNull(message = "{required}")
//     @Size(message = "{required}", min = 1) // 未入力の場合、空文字になるため。
//     @Id
//     @Column(length = 40)
//     private String name;
//     
//     @Email(message = "{email.invalid}")
//     @NotNull(message = "{required}")
//     @Size(message = "{required}", min = 1)
//     @Column(length = 200, nullable = false)
//     private String email;
//     
//     @Column(length = 32, nullable = true )
//     private String gravaterHash;
//     
//     @Column(length = 40, nullable = true )
//     private String token;
//     
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public String getGravaterHash() {
//         return gravaterHash;
//     }
// 
//     public void setGravaterHash(String gravaterHash) {
//         this.gravaterHash = gravaterHash;
//     }
//     
//     public String getGravatar() {
//         return "https://www.gravatar.com/avatar/" + gravaterHash;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public void setToken(String token) {
//         this.token = token;
//     }
// }
// 
// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Chat.java
// @Vetoed //CDI対象外
// @Entity
// public class Chat implements Serializable {
//     
//     /** id(自動生成) */
//     @Id
//     @GeneratedValue // ID自動生成 
//     private long id;
//     
//     /** チャットを行ったチャットルーム */
//     @ManyToOne // 多対1関連
//     private Room room;
//     
//     /** 発言者 */
//     @ManyToOne
//     private Account speaker;
//     
//     /** 内容 */
//     @Column(length = 200, nullable = false)
//     private String content;
// 
//     /** 投稿時刻 */
//     @Column(nullable = false)
//     private Timestamp posted;
//     
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public Room getRoom() {
//         return room;
//     }
// 
//     public void setRoom(Room room) {
//         this.room = room;
//     }
// 
//     public String getContent() {
//         return content;
//     }
// 
//     public void setContent(String content) {
//         this.content = content;
//     }
// 
//     public Account getSpeaker() {
//         return speaker;
//     }
// 
//     public void setSpeaker(Account speaker) {
//         this.speaker = speaker;
//     }
// 
//     public Timestamp getPosted() {
//         return posted;
//     }
// 
//     public void setPosted(Timestamp posted) {
//         this.posted = posted;
//     }
//     
//     
// }
// 
// Path: try_java_ee7-web/src/main/java/enterprisegeeks/entity/Room.java
// @Vetoed //CDI対象外
// @XmlRootElement
// @Entity
// @NamedQueries(@NamedQuery(name = "Room.all", query = "select r from Room r order by r.id"))
// public class Room implements Serializable {
//     
//     /** id(自動生成) */
//     @Id
//     @GeneratedValue
//     private long id;
//     
//     /** 部屋名 */
//     @Column(nullable = false, length = 40, unique = true)
//     private String name;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
//     
//     
// }


// Path: try_java_ee7-web/src/main/java/enterprisegeeks/service/Service.java
import enterprisegeeks.entity.Account;
import enterprisegeeks.entity.Chat;
import enterprisegeeks.entity.Room;
import java.sql.Timestamp;
import java.util.List;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package enterprisegeeks.service;


/**
 * 永続層周りの機能を提供
 */
public interface Service{
    
    
    public boolean registerAccount(Account accout);
    
    public Account findAccountByName(String name);
    
    /** ログイン用トークン発行 */
    public String publishToken(Account account);
    
    /** チャットルーム一覧 */
    public List<Room> allRooms();
    
    /** チャットルームのチャット一覧を取得 */
    public List<Chat> findChatByRoom(Room room, Timestamp from);