added tests, preparing submission confirmation

This commit is contained in:
2022-04-17 19:52:52 +02:00
parent 6d73018247
commit e2bba174ee
9 changed files with 335 additions and 157 deletions

View File

@@ -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();
}