added tests, preparing submission confirmation
This commit is contained in:
@@ -19,9 +19,11 @@ public class ListMember {
|
||||
public static final String TABLE_NAME = "ListMembers";
|
||||
public static final int STATE_OWNER = 1;
|
||||
public static final int STATE_SUBSCRIBER = 2;
|
||||
public static final int STATE_UNCONFIRMED = 4;
|
||||
private static final String LIST_EMAIL = "list_email";
|
||||
private static final String USER_EMAIL = "user_email";
|
||||
private static final String STATE = "state";
|
||||
private static final String TOKEN = "token";
|
||||
private final String listEmail;
|
||||
private final String userEmail;
|
||||
private final int state;
|
||||
@@ -32,8 +34,8 @@ public class ListMember {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public static ListMember create(String listEmail, String userEmail, int state) throws SQLException {
|
||||
return new ListMember(listEmail,userEmail,state).save();
|
||||
public static ListMember create(MailingList list, User user, int state) throws SQLException {
|
||||
return new ListMember(list.email(),user.email(),state).save();
|
||||
}
|
||||
|
||||
public static void createTable() throws SQLException {
|
||||
@@ -43,15 +45,15 @@ public class ListMember {
|
||||
.append(LIST_EMAIL).append(" ").append(VARCHAR).append(", ")
|
||||
.append(USER_EMAIL).append(" ").append(VARCHAR).append(", ")
|
||||
.append(STATE).append(" ").append(INT).append(", ")
|
||||
.append(TOKEN).append(" ").append(VARCHAR).append(", ")
|
||||
.append("PRIMARY KEY (").append(LIST_EMAIL).append(", ").append(USER_EMAIL).append("));");
|
||||
Database.open().query(sql.toString()).run();
|
||||
Database.open().query(sql).run();
|
||||
}
|
||||
|
||||
public static List<String> listsOwnedBy(User user) {
|
||||
var list = new ArrayList<String>();
|
||||
try {
|
||||
var rs = Database.open()
|
||||
.query("SELECT "+LIST_EMAIL+" FROM " + TABLE_NAME)
|
||||
var rs = Database.open().select(TABLE_NAME,LIST_EMAIL)
|
||||
.where(USER_EMAIL,user.email())
|
||||
.where(STATE,STATE_OWNER)
|
||||
.exec();
|
||||
@@ -64,7 +66,7 @@ public class ListMember {
|
||||
|
||||
public static Map<User,Integer> of(String listEmail) throws SQLException {
|
||||
var rs = Database.open()
|
||||
.query("SELECT * FROM "+TABLE_NAME)
|
||||
.select(TABLE_NAME)
|
||||
.where(LIST_EMAIL,listEmail)
|
||||
.exec();
|
||||
var temp = new HashMap<String,Integer>();
|
||||
@@ -92,23 +94,23 @@ public class ListMember {
|
||||
return this;
|
||||
}
|
||||
|
||||
public static void unsubscribe(String listEmail, User user) throws SQLException {
|
||||
public static void unsubscribe(MailingList list, User user) throws SQLException {
|
||||
var db = Database.open();
|
||||
var rs = db.query("SELECT * FROM "+TABLE_NAME)
|
||||
.where(LIST_EMAIL,listEmail)
|
||||
var rs = db.select(TABLE_NAME)
|
||||
.where(LIST_EMAIL,list.email())
|
||||
.where(USER_EMAIL,user.email())
|
||||
.exec();
|
||||
while (rs.next()){
|
||||
int state = rs.getInt(STATE) ^ STATE_SUBSCRIBER;
|
||||
if (state < 1) { // drop entry
|
||||
db.query("DELETE FROM "+TABLE_NAME)
|
||||
.where(LIST_EMAIL,listEmail)
|
||||
db.deleteFrom(TABLE_NAME)
|
||||
.where(LIST_EMAIL,list.email())
|
||||
.where(USER_EMAIL,user.email())
|
||||
.run();
|
||||
} else { // update entry: whitdraw subscription
|
||||
db.query("UPDATE "+TABLE_NAME)
|
||||
db.update(TABLE_NAME)
|
||||
.set(STATE,state)
|
||||
.where(LIST_EMAIL,listEmail)
|
||||
.where(LIST_EMAIL,list.email())
|
||||
.where(USER_EMAIL,user.email())
|
||||
.run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user