diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3def0895..13875078 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,6 @@ on: branches: [ master, develop ] tags: [ '*' ] pull_request: - branches: [ master, develop ] jobs: diff --git a/app/build.gradle b/app/build.gradle index fdb844ac..b0865896 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -186,7 +186,7 @@ ext { } dependencies { - implementation "io.github.wulkanowy:sdk:1.8.1" + implementation "io.github.wulkanowy:sdk:1.8.2-SNAPSHOT" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.8' diff --git a/app/schemas/io.github.wulkanowy.data.db.AppDatabase/54.json b/app/schemas/io.github.wulkanowy.data.db.AppDatabase/54.json new file mode 100644 index 00000000..7b41672b --- /dev/null +++ b/app/schemas/io.github.wulkanowy.data.db.AppDatabase/54.json @@ -0,0 +1,2439 @@ +{ + "formatVersion": 1, + "database": { + "version": 54, + "identityHash": "1dc96a366125ec9f8567da87cdc9c863", + "entities": [ + { + "tableName": "Students", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`scrapper_base_url` TEXT NOT NULL, `mobile_base_url` TEXT NOT NULL, `login_type` TEXT NOT NULL, `login_mode` TEXT NOT NULL, `certificate_key` TEXT NOT NULL, `private_key` TEXT NOT NULL, `is_parent` INTEGER NOT NULL, `email` TEXT NOT NULL, `password` TEXT NOT NULL, `symbol` TEXT NOT NULL, `student_id` INTEGER NOT NULL, `user_login_id` INTEGER NOT NULL, `user_name` TEXT NOT NULL, `student_name` TEXT NOT NULL, `school_id` TEXT NOT NULL, `school_short` TEXT NOT NULL, `school_name` TEXT NOT NULL, `class_name` TEXT NOT NULL, `class_id` INTEGER NOT NULL, `is_current` INTEGER NOT NULL, `registration_date` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `nick` TEXT NOT NULL, `avatar_color` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "scrapperBaseUrl", + "columnName": "scrapper_base_url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "mobileBaseUrl", + "columnName": "mobile_base_url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "loginType", + "columnName": "login_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "loginMode", + "columnName": "login_mode", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "certificateKey", + "columnName": "certificate_key", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "privateKey", + "columnName": "private_key", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "isParent", + "columnName": "is_parent", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "email", + "columnName": "email", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "password", + "columnName": "password", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "symbol", + "columnName": "symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "userLoginId", + "columnName": "user_login_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "userName", + "columnName": "user_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentName", + "columnName": "student_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolSymbol", + "columnName": "school_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolShortName", + "columnName": "school_short", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolName", + "columnName": "school_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "className", + "columnName": "class_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "classId", + "columnName": "class_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isCurrent", + "columnName": "is_current", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "registrationDate", + "columnName": "registration_date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "nick", + "columnName": "nick", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "avatarColor", + "columnName": "avatar_color", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_Students_email_symbol_student_id_school_id_class_id", + "unique": true, + "columnNames": [ + "email", + "symbol", + "student_id", + "school_id", + "class_id" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Students_email_symbol_student_id_school_id_class_id` ON `${TABLE_NAME}` (`email`, `symbol`, `student_id`, `school_id`, `class_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "Semesters", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `kindergarten_diary_id` INTEGER NOT NULL DEFAULT 0, `diary_name` TEXT NOT NULL, `school_year` INTEGER NOT NULL, `semester_id` INTEGER NOT NULL, `semester_name` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, `class_id` INTEGER NOT NULL, `unit_id` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_current` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "kindergartenDiaryId", + "columnName": "kindergarten_diary_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "diaryName", + "columnName": "diary_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolYear", + "columnName": "school_year", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "semesterName", + "columnName": "semester_name", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "start", + "columnName": "start", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "end", + "columnName": "end", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "classId", + "columnName": "class_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "unitId", + "columnName": "unit_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "current", + "columnName": "is_current", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_Semesters_student_id_diary_id_kindergarten_diary_id_semester_id", + "unique": true, + "columnNames": [ + "student_id", + "diary_id", + "kindergarten_diary_id", + "semester_id" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Semesters_student_id_diary_id_kindergarten_diary_id_semester_id` ON `${TABLE_NAME}` (`student_id`, `diary_id`, `kindergarten_diary_id`, `semester_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "Exams", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `entry_date` INTEGER NOT NULL, `subject` TEXT NOT NULL, `group` TEXT NOT NULL, `type` TEXT NOT NULL, `description` TEXT NOT NULL, `teacher` TEXT NOT NULL, `teacher_symbol` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entryDate", + "columnName": "entry_date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "group", + "columnName": "group", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacherSymbol", + "columnName": "teacher_symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Timetable", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `number` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, `date` INTEGER NOT NULL, `subject` TEXT NOT NULL, `subjectOld` TEXT NOT NULL, `group` TEXT NOT NULL, `room` TEXT NOT NULL, `roomOld` TEXT NOT NULL, `teacher` TEXT NOT NULL, `teacherOld` TEXT NOT NULL, `info` TEXT NOT NULL, `student_plan` INTEGER NOT NULL, `changes` INTEGER NOT NULL, `canceled` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "number", + "columnName": "number", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "start", + "columnName": "start", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "end", + "columnName": "end", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "subjectOld", + "columnName": "subjectOld", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "group", + "columnName": "group", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "room", + "columnName": "room", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "roomOld", + "columnName": "roomOld", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacherOld", + "columnName": "teacherOld", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "isStudentPlan", + "columnName": "student_plan", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "changes", + "columnName": "changes", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "canceled", + "columnName": "canceled", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Attendance", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `time_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `number` INTEGER NOT NULL, `subject` TEXT NOT NULL, `name` TEXT NOT NULL, `presence` INTEGER NOT NULL, `absence` INTEGER NOT NULL, `exemption` INTEGER NOT NULL, `lateness` INTEGER NOT NULL, `excused` INTEGER NOT NULL, `deleted` INTEGER NOT NULL, `excusable` INTEGER NOT NULL, `excuse_status` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "timeId", + "columnName": "time_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "number", + "columnName": "number", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "presence", + "columnName": "presence", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "absence", + "columnName": "absence", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "exemption", + "columnName": "exemption", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lateness", + "columnName": "lateness", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "excused", + "columnName": "excused", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "excusable", + "columnName": "excusable", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "excuseStatus", + "columnName": "excuse_status", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "AttendanceSummary", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `subject_id` INTEGER NOT NULL, `month` INTEGER NOT NULL, `presence` INTEGER NOT NULL, `absence` INTEGER NOT NULL, `absence_excused` INTEGER NOT NULL, `absence_for_school_reasons` INTEGER NOT NULL, `lateness` INTEGER NOT NULL, `lateness_excused` INTEGER NOT NULL, `exemption` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subjectId", + "columnName": "subject_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "month", + "columnName": "month", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "presence", + "columnName": "presence", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "absence", + "columnName": "absence", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "absenceExcused", + "columnName": "absence_excused", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "absenceForSchoolReasons", + "columnName": "absence_for_school_reasons", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lateness", + "columnName": "lateness", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "latenessExcused", + "columnName": "lateness_excused", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "exemption", + "columnName": "exemption", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Grades", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`semester_id` INTEGER NOT NULL, `student_id` INTEGER NOT NULL, `subject` TEXT NOT NULL, `entry` TEXT NOT NULL, `value` REAL NOT NULL, `modifier` REAL NOT NULL, `comment` TEXT NOT NULL, `color` TEXT NOT NULL, `grade_symbol` TEXT NOT NULL, `description` TEXT NOT NULL, `weight` TEXT NOT NULL, `weightValue` REAL NOT NULL, `date` INTEGER NOT NULL, `teacher` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_read` INTEGER NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "entry", + "columnName": "entry", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "modifier", + "columnName": "modifier", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "comment", + "columnName": "comment", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "color", + "columnName": "color", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "gradeSymbol", + "columnName": "grade_symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "weight", + "columnName": "weight", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "weightValue", + "columnName": "weightValue", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isRead", + "columnName": "is_read", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "GradesSummary", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`semester_id` INTEGER NOT NULL, `student_id` INTEGER NOT NULL, `position` INTEGER NOT NULL, `subject` TEXT NOT NULL, `predicted_grade` TEXT NOT NULL, `final_grade` TEXT NOT NULL, `proposed_points` TEXT NOT NULL, `final_points` TEXT NOT NULL, `points_sum` TEXT NOT NULL, `average` REAL NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_predicted_grade_notified` INTEGER NOT NULL, `is_final_grade_notified` INTEGER NOT NULL, `predicted_grade_last_change` INTEGER NOT NULL, `final_grade_last_change` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "predictedGrade", + "columnName": "predicted_grade", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "finalGrade", + "columnName": "final_grade", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "proposedPoints", + "columnName": "proposed_points", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "finalPoints", + "columnName": "final_points", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "pointsSum", + "columnName": "points_sum", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "average", + "columnName": "average", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isPredictedGradeNotified", + "columnName": "is_predicted_grade_notified", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isFinalGradeNotified", + "columnName": "is_final_grade_notified", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "predictedGradeLastChange", + "columnName": "predicted_grade_last_change", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "finalGradeLastChange", + "columnName": "final_grade_last_change", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "GradePartialStatistics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `semester_id` INTEGER NOT NULL, `subject` TEXT NOT NULL, `class_average` TEXT NOT NULL, `student_average` TEXT NOT NULL, `class_amounts` TEXT NOT NULL, `student_amounts` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "classAverage", + "columnName": "class_average", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentAverage", + "columnName": "student_average", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "classAmounts", + "columnName": "class_amounts", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentAmounts", + "columnName": "student_amounts", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "GradesPointsStatistics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `semester_id` INTEGER NOT NULL, `subject` TEXT NOT NULL, `others` REAL NOT NULL, `student` REAL NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "others", + "columnName": "others", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "student", + "columnName": "student", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "GradeSemesterStatistics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `semester_id` INTEGER NOT NULL, `subject` TEXT NOT NULL, `amounts` TEXT NOT NULL, `student_grade` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "amounts", + "columnName": "amounts", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentGrade", + "columnName": "student_grade", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Messages", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`email` TEXT NOT NULL, `message_global_key` TEXT NOT NULL, `mailbox_key` TEXT NOT NULL, `message_id` INTEGER NOT NULL, `correspondents` TEXT NOT NULL, `subject` TEXT NOT NULL, `date` INTEGER NOT NULL, `folder_id` INTEGER NOT NULL, `unread` INTEGER NOT NULL, `read_by` INTEGER, `unread_by` INTEGER, `has_attachments` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL, `content` TEXT NOT NULL, `sender` TEXT, `recipients` TEXT)", + "fields": [ + { + "fieldPath": "email", + "columnName": "email", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "messageGlobalKey", + "columnName": "message_global_key", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "mailboxKey", + "columnName": "mailbox_key", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "messageId", + "columnName": "message_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "correspondents", + "columnName": "correspondents", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folder_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "unread", + "columnName": "unread", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "readBy", + "columnName": "read_by", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "unreadBy", + "columnName": "unread_by", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hasAttachments", + "columnName": "has_attachments", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sender", + "columnName": "sender", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "recipients", + "columnName": "recipients", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "MessageAttachments", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`real_id` INTEGER NOT NULL, `message_global_key` TEXT NOT NULL, `url` TEXT NOT NULL, `filename` TEXT NOT NULL, PRIMARY KEY(`real_id`))", + "fields": [ + { + "fieldPath": "realId", + "columnName": "real_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "messageGlobalKey", + "columnName": "message_global_key", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "filename", + "columnName": "filename", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "real_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Notes", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `teacher` TEXT NOT NULL, `teacher_symbol` TEXT NOT NULL, `category` TEXT NOT NULL, `category_type` INTEGER NOT NULL, `is_points_show` INTEGER NOT NULL, `points` INTEGER NOT NULL, `content` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_read` INTEGER NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacherSymbol", + "columnName": "teacher_symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "category", + "columnName": "category", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "categoryType", + "columnName": "category_type", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isPointsShow", + "columnName": "is_points_show", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "points", + "columnName": "points", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isRead", + "columnName": "is_read", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Homework", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`semester_id` INTEGER NOT NULL, `student_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `entry_date` INTEGER NOT NULL, `subject` TEXT NOT NULL, `content` TEXT NOT NULL, `teacher` TEXT NOT NULL, `teacher_symbol` TEXT NOT NULL, `attachments` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_done` INTEGER NOT NULL, `is_notified` INTEGER NOT NULL, `is_added_by_user` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "semesterId", + "columnName": "semester_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entryDate", + "columnName": "entry_date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacherSymbol", + "columnName": "teacher_symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "attachments", + "columnName": "attachments", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isDone", + "columnName": "is_done", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isAddedByUser", + "columnName": "is_added_by_user", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Subjects", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `real_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "realId", + "columnName": "real_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "LuckyNumbers", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `lucky_number` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "luckyNumber", + "columnName": "lucky_number", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "CompletedLesson", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `number` INTEGER NOT NULL, `subject` TEXT NOT NULL, `topic` TEXT NOT NULL, `teacher` TEXT NOT NULL, `teacher_symbol` TEXT NOT NULL, `substitution` TEXT NOT NULL, `absence` TEXT NOT NULL, `resources` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "number", + "columnName": "number", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "topic", + "columnName": "topic", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacher", + "columnName": "teacher", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "teacherSymbol", + "columnName": "teacher_symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "substitution", + "columnName": "substitution", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "absence", + "columnName": "absence", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "resources", + "columnName": "resources", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Mailboxes", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`globalKey` TEXT NOT NULL, `email` TEXT NOT NULL, `symbol` TEXT NOT NULL, `schoolId` TEXT NOT NULL, `fullName` TEXT NOT NULL, `userName` TEXT NOT NULL, `studentName` TEXT NOT NULL, `schoolNameShort` TEXT NOT NULL, `type` TEXT NOT NULL, PRIMARY KEY(`globalKey`))", + "fields": [ + { + "fieldPath": "globalKey", + "columnName": "globalKey", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "email", + "columnName": "email", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "symbol", + "columnName": "symbol", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolId", + "columnName": "schoolId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fullName", + "columnName": "fullName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userName", + "columnName": "userName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentName", + "columnName": "studentName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolNameShort", + "columnName": "schoolNameShort", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "globalKey" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Recipients", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`mailboxGlobalKey` TEXT NOT NULL, `studentMailboxGlobalKey` TEXT NOT NULL, `fullName` TEXT NOT NULL, `userName` TEXT NOT NULL, `schoolShortName` TEXT NOT NULL, `type` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "mailboxGlobalKey", + "columnName": "mailboxGlobalKey", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "studentMailboxGlobalKey", + "columnName": "studentMailboxGlobalKey", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fullName", + "columnName": "fullName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userName", + "columnName": "userName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "schoolShortName", + "columnName": "schoolShortName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "MobileDevices", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`user_login_id` INTEGER NOT NULL, `device_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `date` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "userLoginId", + "columnName": "user_login_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "deviceId", + "columnName": "device_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Teachers", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `class_id` INTEGER NOT NULL, `subject` TEXT NOT NULL, `name` TEXT NOT NULL, `short_name` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "classId", + "columnName": "class_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "shortName", + "columnName": "short_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "School", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `class_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `address` TEXT NOT NULL, `contact` TEXT NOT NULL, `headmaster` TEXT NOT NULL, `pedagogue` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "classId", + "columnName": "class_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "address", + "columnName": "address", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "contact", + "columnName": "contact", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "headmaster", + "columnName": "headmaster", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "pedagogue", + "columnName": "pedagogue", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Conferences", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `title` TEXT NOT NULL, `subject` TEXT NOT NULL, `agenda` TEXT NOT NULL, `present_on_conference` TEXT NOT NULL, `conference_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "agenda", + "columnName": "agenda", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "presentOnConference", + "columnName": "present_on_conference", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "conferenceId", + "columnName": "conference_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "TimetableAdditional", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `start` INTEGER NOT NULL, `end` INTEGER NOT NULL, `date` INTEGER NOT NULL, `subject` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `repeat_id` BLOB DEFAULT NULL, `is_added_by_user` INTEGER NOT NULL DEFAULT 0)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "start", + "columnName": "start", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "end", + "columnName": "end", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "repeatId", + "columnName": "repeat_id", + "affinity": "BLOB", + "notNull": false, + "defaultValue": "NULL" + }, + { + "fieldPath": "isAddedByUser", + "columnName": "is_added_by_user", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "StudentInfo", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `full_name` TEXT NOT NULL, `first_name` TEXT NOT NULL, `second_name` TEXT NOT NULL, `surname` TEXT NOT NULL, `birth_date` INTEGER NOT NULL, `birth_place` TEXT NOT NULL, `gender` TEXT NOT NULL, `has_polish_citizenship` INTEGER NOT NULL, `family_name` TEXT NOT NULL, `parents_names` TEXT NOT NULL, `address` TEXT NOT NULL, `registered_address` TEXT NOT NULL, `correspondence_address` TEXT NOT NULL, `phone_number` TEXT NOT NULL, `cell_phone_number` TEXT NOT NULL, `email` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `first_guardian_full_name` TEXT, `first_guardian_kinship` TEXT, `first_guardian_address` TEXT, `first_guardian_phones` TEXT, `first_guardian_email` TEXT, `second_guardian_full_name` TEXT, `second_guardian_kinship` TEXT, `second_guardian_address` TEXT, `second_guardian_phones` TEXT, `second_guardian_email` TEXT)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "fullName", + "columnName": "full_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "firstName", + "columnName": "first_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "secondName", + "columnName": "second_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "surname", + "columnName": "surname", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "birthDate", + "columnName": "birth_date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "birthPlace", + "columnName": "birth_place", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "gender", + "columnName": "gender", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "hasPolishCitizenship", + "columnName": "has_polish_citizenship", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "familyName", + "columnName": "family_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "parentsNames", + "columnName": "parents_names", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "address", + "columnName": "address", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "registeredAddress", + "columnName": "registered_address", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "correspondenceAddress", + "columnName": "correspondence_address", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "phoneNumber", + "columnName": "phone_number", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "cellPhoneNumber", + "columnName": "cell_phone_number", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "email", + "columnName": "email", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "firstGuardian.fullName", + "columnName": "first_guardian_full_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "firstGuardian.kinship", + "columnName": "first_guardian_kinship", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "firstGuardian.address", + "columnName": "first_guardian_address", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "firstGuardian.phones", + "columnName": "first_guardian_phones", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "firstGuardian.email", + "columnName": "first_guardian_email", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "secondGuardian.fullName", + "columnName": "second_guardian_full_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "secondGuardian.kinship", + "columnName": "second_guardian_kinship", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "secondGuardian.address", + "columnName": "second_guardian_address", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "secondGuardian.phones", + "columnName": "second_guardian_phones", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "secondGuardian.email", + "columnName": "second_guardian_email", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "TimetableHeaders", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `diary_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `content` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "diaryId", + "columnName": "diary_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SchoolAnnouncements", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`user_login_id` INTEGER NOT NULL, `date` INTEGER NOT NULL, `subject` TEXT NOT NULL, `content` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `is_notified` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "userLoginId", + "columnName": "user_login_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subject", + "columnName": "subject", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isNotified", + "columnName": "is_notified", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Notifications", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`student_id` INTEGER NOT NULL, `title` TEXT NOT NULL, `content` TEXT NOT NULL, `type` TEXT NOT NULL, `destination` TEXT NOT NULL DEFAULT '{\"type\":\"io.github.wulkanowy.ui.modules.Destination.Dashboard\"}', `date` INTEGER NOT NULL, `data` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "studentId", + "columnName": "student_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "destination", + "columnName": "destination", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'{\"type\":\"io.github.wulkanowy.ui.modules.Destination.Dashboard\"}'" + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "data", + "columnName": "data", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "AdminMessages", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `title` TEXT NOT NULL, `content` TEXT NOT NULL, `version_name` INTEGER, `version_max` INTEGER, `target_register_host` TEXT, `target_flavor` TEXT, `destination_url` TEXT, `priority` TEXT NOT NULL, `type` TEXT NOT NULL, `is_dismissible` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "versionMin", + "columnName": "version_name", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "versionMax", + "columnName": "version_max", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "targetRegisterHost", + "columnName": "target_register_host", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "targetFlavor", + "columnName": "target_flavor", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "destinationUrl", + "columnName": "destination_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "priority", + "columnName": "priority", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "isDismissible", + "columnName": "is_dismissible", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1dc96a366125ec9f8567da87cdc9c863')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/io/github/wulkanowy/data/db/AppDatabase.kt b/app/src/main/java/io/github/wulkanowy/data/db/AppDatabase.kt index 792611a8..cfb53485 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/AppDatabase.kt +++ b/app/src/main/java/io/github/wulkanowy/data/db/AppDatabase.kt @@ -56,7 +56,7 @@ import javax.inject.Singleton abstract class AppDatabase : RoomDatabase() { companion object { - const val VERSION_SCHEMA = 53 + const val VERSION_SCHEMA = 54 fun getMigrations(sharedPrefProvider: SharedPrefProvider, appInfo: AppInfo) = arrayOf( Migration2(), @@ -107,6 +107,7 @@ abstract class AppDatabase : RoomDatabase() { Migration50(), Migration51(), Migration53(), + Migration54(), ) fun newInstance( diff --git a/app/src/main/java/io/github/wulkanowy/data/db/migrations/Migration54.kt b/app/src/main/java/io/github/wulkanowy/data/db/migrations/Migration54.kt new file mode 100644 index 00000000..678bd32f --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/data/db/migrations/Migration54.kt @@ -0,0 +1,26 @@ +package io.github.wulkanowy.data.db.migrations + +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase + +class Migration54 : Migration(53, 54) { + + override fun migrate(database: SupportSQLiteDatabase) { + migrateResman(database) + removeTomaszowMazowieckiStudents(database) + } + + private fun migrateResman(database: SupportSQLiteDatabase) { + database.execSQL(""" + UPDATE Students SET + scrapper_base_url = 'https://vulcan.net.pl', + login_type = 'ADFSLightScoped', + symbol = 'rzeszowprojekt' + WHERE scrapper_base_url = 'https://resman.pl' + """.trimIndent()) + } + + private fun removeTomaszowMazowieckiStudents(database: SupportSQLiteDatabase) { + database.execSQL("DELETE FROM Students WHERE symbol = 'tomaszowmazowiecki'") + } +} diff --git a/app/src/main/res/values/api_hosts.xml b/app/src/main/res/values/api_hosts.xml index 8413d68e..a2a08db6 100644 --- a/app/src/main/res/values/api_hosts.xml +++ b/app/src/main/res/values/api_hosts.xml @@ -6,8 +6,9 @@ Gdańska Platforma Edukacyjna Lubelski Portal Oświatowy EduNet Miasta Tarnowa - ResMan Rzeszów Platforma Edukacyjna Koszalina + Gmina-miasto Tomaszów Mazowiecki - System zarządzania oświatą + ResMan Rzeszów Rawa Mazowiecka - Platforma vEdukacja Zduńska Wola - e-Urząd Sieradz - Portal oświatowy @@ -27,7 +28,6 @@ https://edu.gdansk.pl https://edu.lublin.eu https://umt.tarnow.pl - https://resman.pl https://eduportal.koszalin.pl https://vulcan.net.pl/?login https://vulcan.net.pl/?login @@ -40,6 +40,8 @@ https://vulcan.net.pl/?login https://vulcan.net.pl/?login https://vulcan.net.pl/?login + https://vulcan.net.pl/?login + https://vulcan.net.pl/?login http://fakelog.cf/?email @@ -48,8 +50,9 @@ gdansk lublin tarnow - rzeszow koszalin + tomaszowmazowieckiprojekt + rzeszowprojekt rawamazowiecka zdunskawola sieradz diff --git a/app/src/main/res/values/api_symbols.xml b/app/src/main/res/values/api_symbols.xml index 6f9b1739..4b61db48 100644 --- a/app/src/main/res/values/api_symbols.xml +++ b/app/src/main/res/values/api_symbols.xml @@ -4,13 +4,11 @@ Andrychów Augustów Baranów Sandomierski - Bartoszyce Będzin Bełchatów Bełżyce Biała Podlaska Biała Rawska - Białogard Biały Bór Białystok Biecz @@ -18,11 +16,9 @@ Bielsko-Biała Bierawa Bierutów - Biskupice Blachownia Błaszki Błonie - Bochnia Bogatynia Boguchwała Boguty-Pianki @@ -45,6 +41,7 @@ Chełmża Chocianów Chodzież + Chojnice Chojnów Chorzów Ciechanów @@ -58,7 +55,9 @@ Dąbrowa Górnicza Dąbrowa Tarnowska Dębica + Dębno Dobrzeń Wielki + Dobrzeń Wielki 2 Dobrzyń Nad Wisłą Dolnośląskie Duszniki-Zdrój @@ -76,6 +75,9 @@ Głogów Małopolski Głowno Głubczyce + Głubczyce 2 + Głuchołazy + Gmina Abramów Gmina Adamówka Gmina Aleksandrów Kujawski Gmina Aleksandrów Łódzki @@ -87,14 +89,17 @@ Gmina Bądkowo Gmina Bałtów Gmina Baranów - Gmina Barciany Gmina Barcin + Gmina Barczewo Gmina Baruchowo + Gmina Batorz Gmina Będzino Gmina Bełchatów + Gmina Besko Gmina Białaczów Gmina Białe Błota - Gmina Bielsk Podlaski + Gmina Białopole + Gmina Bielsk Gmina Bircza Gmina Błażowa Gmina Błędów @@ -104,7 +109,6 @@ Gmina Bobrowniki Gmina Bodzentyn Gmina Bogoria - Gmina Bojanów Gmina Bojanowo Gmina Bojszowy Gmina Bolesławiec @@ -113,10 +117,14 @@ Gmina Borów Gmina Borowa Gmina Borzęcin + Gmina Borzytuchom + Gmina Bralin Gmina Branice Gmina Braniewo + Gmina Brańszczyk Gmina Brąszewice Gmina Brenna + Gmina Brok Gmina Brzeg Dolny Gmina Brzeziny Gmina Brzeźnio @@ -125,13 +133,14 @@ Gmina Brzuze Gmina Brzyska Gmina Buczek - Gmina Buczkowice Gmina Budzów Gmina Budzyń + Gmina Bukowina Tatrzańska Gmina Bukowsko Gmina Byczyna Gmina Bystra-Sidzina - Gmina Bytoń + Gmina Cegłów + Gmina Cekcyn Gmina Ceków-Kolonia Gmina Celestynów Gmina Cewice @@ -139,16 +148,25 @@ Gmina Chełm Gmina Chełmiec Gmina Chełmno + Gmina Chłopice Gmina Chmielnik + Gmina Chociwel Gmina Chocz Gmina Chodel + Gmina Chodów Gmina Chojnice Gmina Chojnów + Gmina Chotcza + Gmina Chrząstowice Gmina Chrzypsko Wielkie Gmina Chybie Gmina Ciasna + Gmina Ciechanów Gmina Ciechocin + Gmina Cielądz + Gmina Cieszanów Gmina Ciężkowice + Gmina Cisek Gmina Cisna Gmina Cmolas Gmina Cyców @@ -156,19 +174,26 @@ Gmina Czarna Gmina Czarnków Gmina Czarny Dunajec + Gmina Czastary Gmina Czechowice-Dziedzice Gmina Czernichów Gmina Czerniejewo + Gmina Czerniewice + Gmina Czernikowo Gmina Czerwionka-Leszczyny - Gmina Czerwonka + Gmina Czerwonak Gmina Człuchów Gmina Czosnów + Gmina Dąbrowa Zielona + Gmina Dąbrowice Gmina Damasławek Gmina Damnica Gmina Darłowo Gmina Dębe Wielkie Gmina Dębica Gmina Dębno + Gmina Dębowa Kłoda + Gmina Debrzno Gmina Dłutów Gmina Dobczyce Gmina Dobra @@ -176,19 +201,31 @@ Gmina Dobrodzień Gmina Dobroń Gmina Dobrzany + Gmina Dobrzyca Gmina Dobrzyniewo Duże + Gmina Dolsk Gmina Dominowo Gmina Dorohusk + Gmina Doruchów + Gmina Dragacz + Gmina Drawsko + Gmina Drużbice Gmina Drzewica Gmina Dubiecko + Gmina Dubienka Gmina Dukla Gmina Dwikozy + Gmina Dydnia Gmina Dynów Gmina Dziadowa Kłoda Gmina Działoszyce + Gmina Dziemiany Gmina Dzierżoniów + Gmina Dzwola Gmina Elbląg - Gmina Fajsławice + Gmina Ełk + Gmina Fredropol + Gmina Garbatka-Letnisko Gmina Garbów Gmina Garwolin Gmina Gąsawa @@ -198,29 +235,37 @@ Gmina Gdów Gmina Gielniów Gmina Gierałtowice - Gmina Glinojeck Gmina Głogów + Gmina Głogówek Gmina Głuchów + Gmina Głusk Gmina Głuszyca Gmina Gniew + Gmina Gniewino Gmina Gniewoszów Gmina Gniezno Gmina Goczałkowice-Zdrój Gmina Godkowo Gmina Godów Gmina Godziesze Wielkie + Gmina Godziszów Gmina Gołańcz + Gmina Gołcza Gmina Goleszów Gmina Golina Gmina Golub-Dobrzyń + Gmina Gołuchów + Gmina Gomunice Gmina Goraj Gmina Gorlice Gmina Górno + Gmina Górzyca Gmina Gościeradów Gmina Gostyń Gmina Gostynin Gmina Goszczyn Gmina Gózd + Gmina Grabica Gmina Grabów Gmina Grabowiec Gmina Grabów Nad Pilicą @@ -239,45 +284,52 @@ Gmina Grudziądz Gmina Gruta Gmina Grybów + Gmina Gryfice + Gmina Grzmiąca Gmina Haczów Gmina Halinów Gmina Hańsk Gmina Harasiuki Gmina Hażlach Gmina Herby + Gmina Horodło Gmina Hrubieszów Gmina Huszlew Gmina Hyżne Gmina Imielno Gmina Inowrocław + Gmina Irządze Gmina Istebna + Gmina Iwanowice Gmina Iwierzyce Gmina Iwonicz-Zdrój Gmina Izabelin Gmina Izbica - Gmina Jadów + Gmina Izbicko + Gmina Jabłoń Gmina Jaktorów + Gmina Jakubów Gmina Janikowo + Gmina Janów Gmina Janowiec Gmina Janów Podlaski - Gmina Jaraczewo + Gmina Jarczów Gmina Jarocin Gmina Jasienica Rosielna + Gmina Jaśliska Gmina Jasło Gmina Jastków Gmina Jastrowie Gmina Jastrząb Gmina Jedlicze - Gmina Jedlińsk - Gmina Jedlnia-Letnisko Gmina Jejkowice Gmina Jemielnica - Gmina Jemielno Gmina Jerzmanowa Gmina Jeżewo Gmina Jeziora Wielkie Gmina Jeziorzany Gmina Jeżowe + Gmina Joniec Gmina Jordanów Gmina Józefów Gmina Józefów Nad Wisłą @@ -285,14 +337,18 @@ Gmina Kąkolewnica Gmina Kamień Gmina Kamienica - Gmina Kamieniec + Gmina Kamiennik Gmina Kamionka Gmina Karczmiska Gmina Kargowa + Gmina Karlino + Gmina Karniewo Gmina Kawęczyn Gmina Kazimierz Biskupi Gmina Kępice + Gmina Kęsowo Gmina Kiełczygłów + Gmina Kietrz Gmina Kikół Gmina Kiszkowo Gmina Kleczew @@ -307,22 +363,30 @@ Gmina Klucze Gmina Kluczewsko Gmina Kobiele Wielkie + Gmina Kobylanka Gmina Kochanowice Gmina Kock Gmina Kodrąb Gmina Kołaczyce Gmina Kołbaskowo + Gmina Kołbiel Gmina Kołczygłowy + Gmina Kołobrzeg Gmina Koluszki Gmina Komańcza + Gmina Komarówka Podlaska Gmina Komorniki Gmina Komprachcice Gmina Konarzyny Gmina Kondratowice + Gmina Koneck Gmina Koniusza Gmina Konopiska Gmina Końskowola + Gmina Konstantynów Gmina Koprzywnica + Gmina Korfantów + Gmina Kórnik Gmina Korsze Gmina Korycin Gmina Korzenna @@ -332,10 +396,14 @@ Gmina Kościerzyna Gmina Kosów Lacki Gmina Kostrzyn - Gmina Koszyce + Gmina Koszęcin Gmina Kotla Gmina Kotuń + Gmina Kowiesy + Gmina Koziegłowy Gmina Kozłów + Gmina Kramsk + Gmina Kraśniczyn Gmina Kraśnik Gmina Krasnobród Gmina Krasnystaw @@ -345,12 +413,16 @@ Gmina Krośnice Gmina Krupski Młyn Gmina Kruszwica + Gmina Krynice Gmina Krynki Gmina Krzanowice Gmina Krzemieniewo + Gmina Krzeszów Gmina Krzymów + Gmina Krzywcza Gmina Krzywiń Gmina Krzyżanowice + Gmina Ksawerów Gmina Książ Wielki Gmina Kunice Gmina Kunów @@ -360,15 +432,19 @@ Gmina Kwilcz Gmina Łabowa Gmina Łabunie + Gmina Łączna + Gmina Lądek Gmina Łambinowice Gmina Lanckorona + Gmina Łańcut + Gmina Łapanów Gmina Łapsze Niżne Gmina Łasin Gmina Łaskarzew Gmina Lasowice Wielkie Gmina Łaszczów - Gmina Laszki Gmina Latowicz + Gmina Łaziska Gmina Łazy Gmina Łęczyca Gmina Łęczyce @@ -378,11 +454,14 @@ Gmina Lelów Gmina Leśna Gmina Leśna Podlaska + Gmina Leśniowice Gmina Lesznowola Gmina Leżajsk Gmina Lichnowy Gmina Limanowa Gmina Linia + Gmina Liniewo + Gmina Lipiany Gmina Lipinki Gmina Lipnik Gmina Lipowa @@ -390,43 +469,51 @@ Gmina Liszki Gmina Liw Gmina Łobez + Gmina Łochów Gmina Łodygowice Gmina Łomazy + Gmina Łomianki + Gmina Łoniów Gmina Łopiennik Górny Gmina Łopuszno + Gmina Łosice Gmina Lubań Gmina Lubartów Gmina Lubasz + Gmina Lubawka Gmina Lubenia Gmina Łubianka Gmina Lubicz + Gmina Lubień Gmina Lubiewo Gmina Lubin Gmina Łubniany Gmina Lubochnia - Gmina Lubomia Gmina Luboń + Gmina Lubsza + Gmina Lubycza Królewska Gmina Łuków Gmina Łukowica Gmina Lutowiska + Gmina Lututów Gmina Luzino Gmina Łużna Gmina Łysomice + Gmina Maciejowice Gmina Magnuszew + Gmina Majdan Królewski Gmina Maków Podhalański - Gmina Mała Wieś Gmina Malbork Gmina Małdyty Gmina Małkinia Górna Gmina Marcinowice Gmina Margonin Gmina Marianowo - Gmina Markusy - Gmina Masłów + Gmina Markuszów + Gmina Męcinka Gmina Medyka Gmina Mełgiew Gmina Michałów - Gmina Michałowo Gmina Miedziana Góra Gmina Miedźna Gmina Miedźno @@ -435,7 +522,10 @@ Gmina Międzyrzec Podlaski Gmina Międzyzdroje Gmina Miejsce Piastowe + Gmina Miękinia Gmina Mielec + Gmina Mielno + Gmina Mieszkowice Gmina Milanów Gmina Milejów Gmina Milicz @@ -444,21 +534,26 @@ Gmina Miłosław Gmina Milówka Gmina Mińsk Mazowiecki + Gmina Mirów Gmina Mirsk Gmina Młynary + Gmina Modliborzyce Gmina Mogielnica Gmina Mogilany + Gmina Mogilno + Gmina Morawica Gmina Mordy Gmina Moryń Gmina Mrocza Gmina Mrozy + Gmina Mściwojów + Gmina Mstów Gmina Mszana Gmina Mszana Dolna Gmina Murów Gmina Mycielin - Gmina Mysłakowice + Gmina Mykanów Gmina Myślibórz - Gmina Nadarzyn Gmina Namysłów Gmina Nasielsk Gmina Nawojowa @@ -469,23 +564,25 @@ Gmina Niedrzwica Duża Gmina Niedźwiada Gmina Niedźwiedź - Gmina Niegosławice - Gmina Niwiska + Gmina Nowa Karczma Gmina Nowa Ruda Gmina Nowa Wieś Lęborska + Gmina Nowe Gmina Nowe Miasto Gmina Nowe Miasto Nad Wartą - Gmina Nowogród Bobrzański + Gmina Nowogród Gmina Nowosolna Gmina Nowy Kawęczyn + Gmina Nowy Korczyn Gmina Nowy Staw Gmina Nowy Targ Gmina Nowy Tomyśl + Gmina Nozdrzec Gmina Nur Gmina Obrazów Gmina Ochotnica Dolna Gmina Ogrodzieniec - Gmina Olecko + Gmina Olszanica Gmina Olsztynek Gmina Olszyna Gmina Opatowiec @@ -495,11 +592,15 @@ Gmina Osiek Jasielski Gmina Osiek Mały Gmina Osielsko + Gmina Osina + Gmina Osjaków + Gmina Ostroróg Gmina Ostrów Gmina Ostrówek Gmina Ostrów Lubelski Gmina Ostrów Mazowiecka Gmina Ostrów Wielkopolski + Gmina Otmuchów Gmina Otyń Gmina Ożarów Gmina Ożarowice @@ -507,27 +608,32 @@ Gmina Ozorków Gmina Pabianice Gmina Pacanów + Gmina Pacyna Gmina Paczków Gmina Padew Narodowa - Gmina Pajęczno Gmina Pakosław Gmina Pakosławice Gmina Pałecznica Gmina Panki Gmina Parchowo Gmina Parczew - Gmina Pawłosiów + Gmina Pasłęk + Gmina Pątnów Gmina Pawłowice Gmina Pawłowiczki + Gmina Pawonków Gmina Pęcław Gmina Pelplin + Gmina Pępowo Gmina Piaski Gmina Piątnica - Gmina Piecki Gmina Piekoszów + Gmina Pieniężno Gmina Pilchowice + Gmina Pińczów Gmina Pionki - Gmina Piotrków Trybunalski + Gmina Płaska + Gmina Platerówka Gmina Pleśna Gmina Pleszew Gmina Płońsk @@ -535,6 +641,7 @@ Gmina Poczesna Gmina Podedwórze Gmina Podegrodzie + Gmina Podgórzyn Gmina Pokój Gmina Połajewo Gmina Połaniec @@ -543,16 +650,18 @@ Gmina Police Gmina Polkowice Gmina Pomiechówek + Gmina Poniatowa Gmina Popielów Gmina Popów - Gmina Poraj Gmina Potęgowo + Gmina Potok Wielki Gmina Praszka - Gmina Prażmów Gmina Prochowice Gmina Promna Gmina Prószków + Gmina Prusice Gmina Pruszcz Gdański + Gmina Przechlewo Gmina Przecław Gmina Przedecz Gmina Przemęt @@ -562,7 +671,9 @@ Gmina Przodkowo Gmina Przykona Gmina Przyłęk + Gmina Przyrów Gmina Przystajń + Gmina Przytoczna Gmina Puchaczów Gmina Puck Gmina Puławy @@ -570,10 +681,10 @@ Gmina Puszcza Mariańska Gmina Pysznica Gmina Pyzdry + Gmina Raba Wyżna Gmina Rachanie Gmina Raciechowice - Gmina Racławice - Gmina Radecznica + Gmina Radgoszcz Gmina Radków Gmina Radłów Gmina Radomin @@ -581,16 +692,29 @@ Gmina Radomyśl Nad Sanem Gmina Radoszyce Gmina Radwanice + Gmina Radymno + Gmina Radziejów Gmina Radziłów + Gmina Rajgród + Gmina Raków + Gmina Rakszawa Gmina Rawa Mazowiecka + Gmina Regnów Gmina Reńska Wieś + Gmina Rogóźno + Gmina Rokitno + Gmina Ropa Gmina Rossosz Gmina Rozprza Gmina Ruciane-Nida Gmina Ruda-Huta Gmina Rudna Gmina Rudniki + Gmina Rudnik Nad Sanem + Gmina Rudziniec Gmina Rusiec + Gmina Rusinów + Gmina Rybczewice Gmina Rychliki Gmina Rychtal Gmina Ryczywół @@ -598,32 +722,39 @@ Gmina Rypin Gmina Rytro Gmina Rytwiany - Gmina Rząśnia Gmina Rzeczyca Gmina Rzepiennik Strzyżewski Gmina Rzepin + Gmina Rzezawa Gmina Rzgów Gmina Sadki Gmina Sadowne Gmina Samborzec Gmina Sanok + Gmina Sawin Gmina Ścinawa Gmina Sędziejowice + Gmina Sejny + Gmina Sękowa Gmina Sępopol Gmina Serokomla Gmina Sianów Gmina Sicienko Gmina Sieciechów Gmina Siedlce + Gmina Siedliszcze Gmina Siemiatycze + Gmina Siemień Gmina Siemyśl Gmina Siennica Gmina Siennica Różana Gmina Sienno Gmina Siepraw Gmina Sieradz + Gmina Sieraków Gmina Sierakowice Gmina Siewierz + Gmina Sitkówka-Nowiny Gmina Sitno Gmina Skarżysko Kościelne Gmina Skępe @@ -631,16 +762,22 @@ Gmina Skoczów Gmina Skoki Gmina Skołyszyn + Gmina Skrwilno Gmina Skrzyszów Gmina Skulsk + Gmina Skwierzyna Gmina Sława + Gmina Śliwice Gmina Słopnice + Gmina Słubice Gmina Słupca Gmina Słupia + Gmina Słupia (Konecka) + Gmina Śmigiel Gmina Sobienie-Jeziory + Gmina Sobolew Gmina Sobótka Gmina Sokółka - Gmina Sokoły Gmina Solina Gmina Sośnicowice Gmina Sośnie @@ -655,11 +792,16 @@ Gmina Stare Miasto Gmina Stare Pole Gmina Starogard Gdański + Gmina Stary Brus + Gmina Stary Dzierzgoń + Gmina Stary Targ Gmina Stawiszyn + Gmina Stepnica Gmina Stoczek Łukowski Gmina Stopnica Gmina Strawczyn Gmina Stryków + Gmina Stryszawa Gmina Stryszów Gmina Strzałkowo Gmina Strzelce Opolskie @@ -668,38 +810,43 @@ Gmina Strzyżewice Gmina Stupsk Gmina Subkowy + Gmina Suchań Gmina Suchedniów Gmina Suchożebry Gmina Suchy Las Gmina Sulechów Gmina Sulęcin + Gmina Sulejów Gmina Sulików Gmina Sulmierzyce Gmina Sułów Gmina Susiec - Gmina Świerklaniec + Gmina Świercze + Gmina Świerczów + Gmina Świerklany Gmina Świerzawa Gmina Świeszyno Gmina Świlcza Gmina Szadek Gmina Szaflary Gmina Szastarka + Gmina Szczawin Kościelny Gmina Szczebrzeszyn Gmina Szczekociny Gmina Szczerców - Gmina Szczutowo Gmina Szczytna Gmina Szczytniki - Gmina Szemud + Gmina Szczytno Gmina Szerzyny Gmina Szlichtyngowa + Gmina Szreńsk + Gmina Szudziałowo Gmina Szydłów Gmina Tarłów Gmina Tarnów Gmina Tarnowiec Gmina Tarnów Opolski Gmina Teresin - Gmina Terespol Gmina Tereszpol Gmina Tłuchowo Gmina Tłuszcz @@ -709,12 +856,15 @@ Gmina Toszek Gmina Trąbki Wielkie Gmina Trzebiatów + Gmina Trzebielino Gmina Trzebinia - Gmina Trzeszczany Gmina Trzyciąż + Gmina Trzydnik Duży Gmina Tuchów + Gmina Tułowice Gmina Turośń Kościelna Gmina Tuszów Narodowy + Gmina Tworóg Gmina Tyczyn Gmina Tymbark Gmina Tyrawa Wołoska @@ -723,15 +873,21 @@ Gmina Ulan-Majorat Gmina Ulanów Gmina Ułęż + Gmina Ulhówek Gmina Urszulin Gmina Urzędów + Gmina Uście Gorlickie Gmina Uścimów Gmina Wąchock + Gmina Wądroże Wielkie Gmina Wągrowiec + Gmina Walce Gmina Wąpielsk Gmina Wasilków + Gmina Wąsosz Gmina Wąwolnica Gmina Wejherowo + Gmina Werbkowice Gmina Wiązów Gmina Wiązowna Gmina Wicko @@ -739,16 +895,21 @@ Gmina Wielbark Gmina Wieleń Gmina Wielgie + Gmina Wielgomłyny Gmina Wieliszew Gmina Wielka Nieszawka Gmina Wieniawa Gmina Wieprz Gmina Wieruszów + Gmina Wierzbinek Gmina Wierzbno + Gmina Wierzchlas Gmina Wierzchosławice Gmina Wietrzychowice Gmina Wijewo + Gmina Wilczyce Gmina Wilczyn + Gmina Wilkołaz Gmina Wilków Gmina Wilkowice Gmina Winnica @@ -759,12 +920,14 @@ Gmina Witkowo Gmina Władysławów Gmina Wleń + Gmina Włocławek Gmina Włodawa Gmina Włoszczowa Gmina Wodzierady Gmina Wodzisław Gmina Wojcieszków Gmina Wojnicz + Gmina Wojsławice Gmina Wola Krzysztoporska Gmina Wolanów Gmina Wolbrom @@ -775,15 +938,18 @@ Gmina Wręczyca Wielka Gmina Wronki Gmina Wyrzysk - Gmina Zabierzów + Gmina Wysokie Gmina Żabno Gmina Żagań - Gmina Zagórz + Gmina Zagórów Gmina Zaklików Gmina Zakroczym Gmina Zakrzówek + Gmina Zalesie Gmina Zaleszany + Gmina Załuski Gmina Zamość + Gmina Żarnów Gmina Żarnowiec Gmina Żarów Gmina Zarszyn @@ -795,20 +961,26 @@ Gmina Zbójno Gmina Zbrosławice Gmina Zduńska Wola - Gmina Zduny Gmina Zdzieszowice + Gmina Zębowice Gmina Zebrzydowice + Gmina Żegocina Gmina Żelazków + Gmina Zembrzyce Gmina Zgierz Gmina Zgorzelec Gmina Ziębice Gmina Zielonki Gmina Zławieś Wielka + Gmina Złota + Gmina Złotniki Kujawskie Gmina Żmudź Gmina Żnin Gmina Żółkiewka Gmina Żołynia Gmina Żukowice + Gmina Żurawica + Gmina Żyraków Gmina Żyrzyn Gmina Żytno Gniezno @@ -817,19 +989,19 @@ Góra Góra Kalwaria Gorlice + Górzno Gorzów Śląski Gorzów Wielkopolski Gostynin Grajewo Grodzisk Mazowiecki - Gronowo Elbląskie Grudziądz + Grybów Gryfino Gryfów Śląski Hel Hrubieszów Inowrocław - Iwanowice Izbica Kujawska Jabłonowo Pomorskie Janowiec Wielkopolski @@ -839,7 +1011,6 @@ Jasło Jastrzębie-Zdrój Jawor - Jaworzno Jedlina-Zdrój Jelcz-Laskowice Jelenia Góra @@ -860,9 +1031,9 @@ Kępno Kętrzyn Kielce - Kiełczygłów Kłodawa Kłodzko + Kluczbork Knurów Kobyłka Koło @@ -892,11 +1063,13 @@ Krzeszowice Krzyż Wielkopolski Książ Wielkopolski - Kudowa-Zdrój Kujawsko-Pomorskie + Kutno Kuźnia Raciborska + Kwidzyn Łabiszyn Lądek-Zdrój + Łańcut Łapy Łask Łaskarzew @@ -908,10 +1081,10 @@ Legnica Leszno Lewin Brzeski + Lewin Brzeski 2 Leżajsk Limanowa Lipno - Lipsko Łódź Łódzkie Łowicz @@ -928,11 +1101,8 @@ Lwówek Śląski Malbork Małopolskie - Marciszów Marki - Masłowice Mazowieckie - Miastko Michałowice Miechów Międzyrzec Podlaski @@ -940,6 +1110,7 @@ Mielec Milanówek Mińsk Mazowiecki + Mniszków Mosina Mrągowo Mrągowski @@ -949,18 +1120,17 @@ Mysłowice Myszków Nakło Nad Notecią - Nasielsk Niemodlin Niepołomice Nisko Nowa Dęba Nowa Sarzyna + Nowa Sól Nowe Miasteczko Nowe Skalmierzyce Nowogard Nowogród Bobrzański Nowogrodziec - Nowosolna Nowy Dwór Mazowiecki Nowy Sącz Nowy Targ @@ -974,6 +1144,8 @@ Opoczno Opole Opole Lubelskie + Opolskie + Orzesze Osieczna Osiecznica Ostróda @@ -991,13 +1163,16 @@ Piekary Śląskie Pieńsk Piła + Pilzno Piotrków Trybunalski Pisz Płock Płońsk Pniewy + Pobiedziska Podkarpackie Podkowa Leśna + Podlaskie Połczyn-Zdrój Pomorskie Poniec @@ -1006,7 +1181,7 @@ Powiat augustowski Powiat będziński Powiat bełchatowski - Powiat białobrzeski + Powiat białostocki Powiat bialski Powiat bielski Powiat bieszczadzki @@ -1032,6 +1207,7 @@ Powiat człuchowski Powiat dąbrowski Powiat dębicki + Powiat drawski Powiat działdowski Powiat dzierżoniowski Powiat elbląski @@ -1046,10 +1222,11 @@ Powiat goleniowski Powiat golubsko-dobrzyński Powiat gorlicki + Powiat górowski Powiat gorzowski Powiat gostyński + Powiat grajewski Powiat grójecki - Powiat grudziądzki Powiat gryficki Powiat gryfiński Powiat hajnowski @@ -1064,6 +1241,7 @@ Powiat jędrzejowski Powiat jeleniogórski Powiat kaliski + Powiat kamiennogórski Powiat kamieński Powiat kartuski Powiat kazimierski @@ -1088,6 +1266,7 @@ Powiat krośnieński Powiat krotoszyński Powiat kutnowski + Powiat łańcucki Powiat łaski Powiat lęborski Powiat łęczycki @@ -1102,6 +1281,7 @@ Powiat lipski Powiat łobeski Powiat łódzki wschodni + Powiat łosicki Powiat łowicki Powiat lubaczowski Powiat lubański @@ -1122,9 +1302,11 @@ Powiat myślenicki Powiat myszkowski Powiat nakielski + Powiat namysłowski Powiat nidzicki Powiat niżański Powiat nowodworski + Powiat nowomiejski Powiat nowosądecki Powiat nowosolski Powiat nowotarski @@ -1160,7 +1342,6 @@ Powiat proszowicki Powiat prudnicki Powiat pruszkowski - Powiat przasnyski Powiat przemyski Powiat przeworski Powiat przysuski @@ -1183,6 +1364,7 @@ Powiat rzeszowski Powiat sandomierski Powiat sanocki + Powiat sejneński Powiat sępoleński Powiat siedlecki Powiat siemiatycki @@ -1210,6 +1392,7 @@ Powiat świdnicki Powiat świdwiński Powiat świebodziński + Powiat świecki Powiat szamotulski Powiat szczycieński Powiat sztumski @@ -1228,6 +1411,7 @@ Powiat wągrowiecki Powiat wałecki Powiat warszawski zachodni + Powiat węgorzewski Powiat węgrowski Powiat wejherowski Powiat wielicki @@ -1247,7 +1431,6 @@ Powiat wyszkowski Powiat ząbkowicki Powiat żagański - Powiat zambrowski Powiat zamojski Powiat żarski Powiat zawierciański @@ -1258,34 +1441,33 @@ Powiat złotoryjski Powiat złotowski Powiat żniński - Powiat żuromiński Powiat żyrardowski Powiat żywiecki Poznań - Prostki Proszowice Prudnik + Pruszcz Gdański Pruszków Przasnysz Przemyśl Przeworsk Przysucha Pszczyna - Pszów Puck Puławy + Pułtusk + Puszczykowo Pyskowice Rabka-Zdrój Raciąż Racibórz - Raciechowice Radom Radomsko + Radomyśl Wielki Radymno Radziejów Radzionków Radzyń Podlaski - Raków Rawa Mazowiecka Rawicz Reda @@ -1299,6 +1481,7 @@ Rymanów Rypin Rzeszów + Rzeszów projekt Sandomierz Sanok Sędziszów Małopolski @@ -1306,7 +1489,6 @@ Siedlce Siemianowice Śląskie Siemiatycze - Sieniawa Sieradz Skarżysko-Kamienna Skawina @@ -1325,17 +1507,15 @@ Środa Śląska Środa Wielkopolska Starachowice + Stargard Starogard Gdański Stary Sącz Staszów Stronie Śląskie - Strzegom Strzyżów - Suchy Las Sulejówek Sułkowice Sulmierzyce - Suwalski Swarzędz Świdnica Świdnik @@ -1358,8 +1538,10 @@ Terespol Tomaszów Lubelski Tomaszów Mazowiecki + Tomaszów Mazowiecki projekt Toruń Trzcianka + Trzcińsko-Zdrój Trzebnica Trzemeszno Tuliszków @@ -1372,7 +1554,7 @@ Ustrzyki Dolne Wadowice Wągrowiec - Wałbrzych + Wałcz Warmińsko-Mazurskie Warszawa Wąsosz @@ -1381,7 +1563,7 @@ Więcbork Wieliczka Wielkopolskie - Wizna + Wieluń Władysławowo Włocławek Włodawa @@ -1410,6 +1592,7 @@ Zielona Góra Zielonka Złotoryja + Złotów Żory Zwoleń Żyrardów @@ -1418,13 +1601,11 @@ andrychow augustow baranowsandomierski - bartoszyce bedzin belchatow belzyce bialapodlaska bialarawska - bialogard bialybor bialystok biecz @@ -1432,11 +1613,9 @@ bielskobiala bierawa bierutow - biskupice blachownia blaszki blonie - bochnia bogatynia boguchwala bogutypianki @@ -1459,6 +1638,7 @@ chelmza chocianow chodziez + chojnice chojnow chorzow ciechanow @@ -1472,7 +1652,9 @@ dabrowagornicza dabrowatarnowska debica + debno dobrzenwielki + dobrzenwielki2 dobrzynnadwisla dolnoslaskie dusznikizdroj @@ -1490,6 +1672,9 @@ glogowmalopolski glowno glubczyce + glubczyce2 + glucholazy + gminaabramow gminaadamowka gminaaleksandrowkujawski gminaaleksandrowlodzki @@ -1501,14 +1686,17 @@ gminabadkowo gminabaltow gminabaranow - gminabarciany gminabarcin + gminabarczewo gminabaruchowo + gminabatorz gminabedzino gminabelchatow + gminabesko gminabialaczow gminabialeblota - gminabielskpodlaski + gminabialopole + gminabielsk gminabircza gminablazowa gminabledow @@ -1518,7 +1706,6 @@ gminabobrowniki gminabodzentyn gminabogoria - gminabojanow gminabojanowo gminabojszowy gminaboleslawiec @@ -1527,10 +1714,14 @@ gminaborow gminaborowa gminaborzecin + gminaborzytuchom + gminabralin gminabranice gminabraniewo + gminabranszczyk gminabraszewice gminabrenna + gminabrok gminabrzegdolny gminabrzeziny gminabrzeznio @@ -1539,13 +1730,14 @@ gminabrzuze gminabrzyska gminabuczek - gminabuczkowice gminabudzow gminabudzyn + gminabukowinatatrzanska gminabukowsko gminabyczyna gminabystrasidzina - gminabyton + gminaceglow + gminacekcyn gminacekowkolonia gminacelestynow gminacewice @@ -1553,16 +1745,25 @@ gminachelm gminachelmiec gminachelmno + gminachlopice gminachmielnik + gminachociwel gminachocz gminachodel + gminachodow gminachojnice gminachojnow + gminachotcza + gminachrzastowice gminachrzypskowielkie gminachybie gminaciasna + gminaciechanow gminaciechocin + gminacieladz + gminacieszanow gminaciezkowice + gminacisek gminacisna gminacmolas gminacycow @@ -1570,19 +1771,26 @@ gminaczarna gminaczarnkow gminaczarnydunajec + gminaczastary gminaczechowicedziedzice gminaczernichow gminaczerniejewo + gminaczerniewice + gminaczernikowo gminaczerwionkaleszczyny - gminaczerwonka + gminaczerwonak gminaczluchow gminaczosnow + gminadabrowazielona + gminadabrowice gminadamaslawek gminadamnica gminadarlowo gminadebewielkie gminadebica gminadebno + gminadebowakloda + gminadebrzno gminadlutow gminadobczyce gminadobra @@ -1590,19 +1798,31 @@ gminadobrodzien gminadobron gminadobrzany + gminadobrzyca gminadobrzyniewoduze + gminadolsk gminadominowo gminadorohusk + gminadoruchow + gminadragacz + gminadrawsko + gminadruzbice gminadrzewica gminadubiecko + gminadubienka gminadukla gminadwikozy + gminadydnia gminadynow gminadziadowakloda gminadzialoszyce + gminadziemiany gminadzierzoniow + gminadzwola gminaelblag - gminafajslawice + gminaelk + gminafredropol + gminagarbatkaletnisko gminagarbow gminagarwolin gminagasawa @@ -1612,29 +1832,37 @@ gminagdow gminagielniow gminagieraltowice - gminaglinojeck gminaglogow + gminaglogowek gminagluchow + gminaglusk gminagluszyca gminagniew + gminagniewino gminagniewoszow gminagniezno gminagoczalkowicezdroj gminagodkowo gminagodow gminagodzieszewielkie + gminagodziszow gminagolancz + gminagolcza gminagoleszow gminagolina gminagolubdobrzyn + gminagoluchow + gminagomunice gminagoraj gminagorlice gminagorno + gminagorzyca gminagoscieradow gminagostyn gminagostynin gminagoszczyn gminagozd + gminagrabica gminagrabow gminagrabowiec gminagrabownadpilica @@ -1653,45 +1881,52 @@ gminagrudziadz gminagruta gminagrybow + gminagryfice + gminagrzmiaca gminahaczow gminahalinow gminahansk gminaharasiuki gminahazlach gminaherby + gminahorodlo gminahrubieszow gminahuszlew gminahyzne gminaimielno gminainowroclaw + gminairzadze gminaistebna + gminaiwanowice gminaiwierzyce gminaiwoniczzdroj gminaizabelin gminaizbica - gminajadow + gminaizbicko + gminajablon gminajaktorow + gminajakubow gminajanikowo + gminajanow gminajanowiec gminajanowpodlaski - gminajaraczewo + gminajarczow gminajarocin gminajasienicarosielna + gminajasliska gminajaslo gminajastkow gminajastrowie gminajastrzab gminajedlicze - gminajedlinsk - gminajedlnialetnisko gminajejkowice gminajemielnica - gminajemielno gminajerzmanowa gminajezewo gminajeziorawielkie gminajeziorzany gminajezowe + gminajoniec gminajordanow gminajozefow gminajozefownadwisla @@ -1699,14 +1934,18 @@ gminakakolewnica gminakamien gminakamienica - gminakamieniec + gminakamiennik gminakamionka gminakarczmiska gminakargowa + gminakarlino + gminakarniewo gminakaweczyn gminakazimierzbiskupi gminakepice + gminakesowo gminakielczyglow + gminakietrz gminakikol gminakiszkowo gminakleczew @@ -1721,22 +1960,30 @@ gminaklucze gminakluczewsko gminakobielewielkie + gminakobylanka gminakochanowice gminakock gminakodrab gminakolaczyce gminakolbaskowo + gminakolbiel gminakolczyglowy + gminakolobrzeg gminakoluszki gminakomancza + gminakomarowkapodlaska gminakomorniki gminakomprachcice gminakonarzyny gminakondratowice + gminakoneck gminakoniusza gminakonopiska gminakonskowola + gminakonstantynow gminakoprzywnica + gminakorfantow + gminakornik gminakorsze gminakorycin gminakorzenna @@ -1746,10 +1993,14 @@ gminakoscierzyna gminakosowlacki gminakostrzyn - gminakoszyce + gminakoszecin gminakotla gminakotun + gminakowiesy + gminakozieglowy gminakozlow + gminakramsk + gminakrasniczyn gminakrasnik gminakrasnobrod gminakrasnystaw @@ -1759,12 +2010,16 @@ gminakrosnice gminakrupskimlyn gminakruszwica + gminakrynice gminakrynki gminakrzanowice gminakrzemieniewo + gminakrzeszow gminakrzymow + gminakrzywcza gminakrzywin gminakrzyzanowice + gminaksawerow gminaksiazwielki gminakunice gminakunow @@ -1774,15 +2029,19 @@ gminakwilcz gminalabowa gminalabunie + gminalaczna + gminaladek gminalambinowice gminalanckorona + gminalancut + gminalapanow gminalapszenizne gminalasin gminalaskarzew gminalasowicewielkie gminalaszczow - gminalaszki gminalatowicz + gminalaziska gminalazy gminaleczyca gminaleczyce @@ -1792,11 +2051,14 @@ gminalelow gminalesna gminalesnapodlaska + gminalesniowice gminalesznowola gminalezajsk gminalichnowy gminalimanowa gminalinia + gminaliniewo + gminalipiany gminalipinki gminalipnik gminalipowa @@ -1804,43 +2066,51 @@ gminaliszki gminaliw gminalobez + gminalochow gminalodygowice gminalomazy + gminalomianki + gminaloniow gminalopiennikgorny gminalopuszno + gminalosice gminaluban gminalubartow gminalubasz + gminalubawka gminalubenia gminalubianka gminalubicz + gminalubien gminalubiewo gminalubin gminalubniany gminalubochnia - gminalubomia gminalubon + gminalubsza + gminalubyczakrolewska gminalukow gminalukowica gminalutowiska + gminalututow gminaluzino gminaluzna gminalysomice + gminamaciejowice gminamagnuszew + gminamajdankrolewski gminamakowpodhalanski - gminamalawies gminamalbork gminamaldyty gminamalkiniagorna gminamarcinowice gminamargonin gminamarianowo - gminamarkusy - gminamaslow + gminamarkuszow + gminamecinka gminamedyka gminamelgiew gminamichalow - gminamichalowo gminamiedzianagora gminamiedzna gminamiedzno @@ -1849,7 +2119,10 @@ gminamiedzyrzecpodlaski gminamiedzyzdroje gminamiejscepiastowe + gminamiekinia gminamielec + gminamielno + gminamieszkowice gminamilanow gminamilejow gminamilicz @@ -1858,21 +2131,26 @@ gminamiloslaw gminamilowka gminaminskmazowiecki + gminamirow gminamirsk gminamlynary + gminamodliborzyce gminamogielnica gminamogilany + gminamogilno + gminamorawica gminamordy gminamoryn gminamrocza gminamrozy + gminamsciwojow + gminamstow gminamszana gminamszanadolna gminamurow gminamycielin - gminamyslakowice + gminamykanow gminamysliborz - gminanadarzyn gminanamyslow gminanasielsk gminanawojowa @@ -1883,23 +2161,25 @@ gminaniedrzwicaduza gminaniedzwiada gminaniedzwiedz - gminaniegoslawice - gminaniwiska + gminanowakarczma gminanowaruda gminanowawiesleborska + gminanowe gminanowemiasto gminanowemiastonadwarta - gminanowogrodbobrzanski + gminanowogrod gminanowosolna gminanowykaweczyn + gminanowykorczyn gminanowystaw gminanowytarg gminanowytomysl + gminanozdrzec gminanur gminaobrazow gminaochotnicadolna gminaogrodzieniec - gminaolecko + gminaolszanica gminaolsztynek gminaolszyna gminaopatowiec @@ -1909,11 +2189,15 @@ gminaosiekjasielski gminaosiekmaly gminaosielsko + gminaosina + gminaosjakow + gminaostrorog gminaostrow gminaostrowek gminaostrowlubelski gminaostrowmazowiecka gminaostrowwielkopolski + gminaotmuchow gminaotyn gminaozarow gminaozarowice @@ -1921,27 +2205,32 @@ gminaozorkow gminapabianice gminapacanow + gminapacyna gminapaczkow gminapadewnarodowa - gminapajeczno gminapakoslaw gminapakoslawice gminapalecznica gminapanki gminaparchowo gminaparczew - gminapawlosiow + gminapaslek + gminapatnow gminapawlowice gminapawlowiczki + gminapawonkow gminapeclaw gminapelplin + gminapepowo gminapiaski gminapiatnica - gminapiecki gminapiekoszow + gminapieniezno gminapilchowice + gminapinczow gminapionki - gminapiotrkowtrybunalski + gminaplaska + gminaplaterowka gminaplesna gminapleszew gminaplonsk @@ -1949,6 +2238,7 @@ gminapoczesna gminapodedworze gminapodegrodzie + gminapodgorzyn gminapokoj gminapolajewo gminapolaniec @@ -1957,16 +2247,18 @@ gminapolice gminapolkowice gminapomiechowek + gminaponiatowa gminapopielow gminapopow - gminaporaj gminapotegowo + gminapotokwielki gminapraszka - gminaprazmow gminaprochowice gminapromna gminaproszkow + gminaprusice gminapruszczgdanski + gminaprzechlewo gminaprzeclaw gminaprzedecz gminaprzemet @@ -1976,7 +2268,9 @@ gminaprzodkowo gminaprzykona gminaprzylek + gminaprzyrow gminaprzystajn + gminaprzytoczna gminapuchaczow gminapuck gminapulawy @@ -1984,10 +2278,10 @@ gminapuszczamarianska gminapysznica gminapyzdry + gminarabawyzna gminarachanie gminaraciechowice - gminaraclawice - gminaradecznica + gminaradgoszcz gminaradkow gminaradlow gminaradomin @@ -1995,16 +2289,29 @@ gminaradomyslnadsanem gminaradoszyce gminaradwanice + gminaradymno + gminaradziejow gminaradzilow + gminarajgrod + gminarakow + gminarakszawa gminarawamazowiecka + gminaregnow gminarenskawies + gminarogozno + gminarokitno + gminaropa gminarossosz gminarozprza gminarucianenida gminarudahuta gminarudna gminarudniki + gminarudniknadsanem + gminarudziniec gminarusiec + gminarusinow + gminarybczewice gminarychliki gminarychtal gminaryczywol @@ -2012,32 +2319,39 @@ gminarypin gminarytro gminarytwiany - gminarzasnia gminarzeczyca gminarzepiennikstrzyzewski gminarzepin + gminarzezawa gminarzgow gminasadki gminasadowne gminasamborzec gminasanok + gminasawin gminascinawa gminasedziejowice + gminasejny + gminasekowa gminasepopol gminaserokomla gminasianow gminasicienko gminasieciechow gminasiedlce + gminasiedliszcze gminasiemiatycze + gminasiemien gminasiemysl gminasiennica gminasiennicarozana gminasienno gminasiepraw gminasieradz + gminasierakow gminasierakowice gminasiewierz + gminasitkowkanowiny gminasitno gminaskarzyskokoscielne gminaskepe @@ -2045,16 +2359,22 @@ gminaskoczow gminaskoki gminaskolyszyn + gminaskrwilno gminaskrzyszow gminaskulsk + gminaskwierzyna gminaslawa + gminasliwice gminaslopnice + gminaslubice gminaslupca gminaslupia + gminaslupiakonecka + gminasmigiel gminasobieniejeziory + gminasobolew gminasobotka gminasokolka - gminasokoly gminasolina gminasosnicowice gminasosnie @@ -2069,11 +2389,16 @@ gminastaremiasto gminastarepole gminastarogardgdanski + gminastarybrus + gminastarydzierzgon + gminastarytarg gminastawiszyn + gminastepnica gminastoczeklukowski gminastopnica gminastrawczyn gminastrykow + gminastryszawa gminastryszow gminastrzalkowo gminastrzelceopolskie @@ -2082,38 +2407,43 @@ gminastrzyzewice gminastupsk gminasubkowy + gminasuchan gminasuchedniow gminasuchozebry gminasuchylas gminasulechow gminasulecin + gminasulejow gminasulikow gminasulmierzyce gminasulow gminasusiec - gminaswierklaniec + gminaswiercze + gminaswierczow + gminaswierklany gminaswierzawa gminaswieszyno gminaswilcza gminaszadek gminaszaflary gminaszastarka + gminaszczawinkoscielny gminaszczebrzeszyn gminaszczekociny gminaszczercow - gminaszczutowo gminaszczytna gminaszczytniki - gminaszemud + gminaszczytno gminaszerzyny gminaszlichtyngowa + gminaszrensk + gminaszudzialowo gminaszydlow gminatarlow gminatarnow gminatarnowiec gminatarnowopolski gminateresin - gminaterespol gminatereszpol gminatluchowo gminatluszcz @@ -2123,12 +2453,15 @@ gminatoszek gminatrabkiwielkie gminatrzebiatow + gminatrzebielino gminatrzebinia - gminatrzeszczany gminatrzyciaz + gminatrzydnikduzy gminatuchow + gminatulowice gminaturosnkoscielna gminatuszownarodowy + gminatworog gminatyczyn gminatymbark gminatyrawawoloska @@ -2137,15 +2470,21 @@ gminaulanmajorat gminaulanow gminaulez + gminaulhowek gminaurszulin gminaurzedow + gminausciegorlickie gminauscimow gminawachock + gminawadrozewielkie gminawagrowiec + gminawalce gminawapielsk gminawasilkow + gminawasosz gminawawolnica gminawejherowo + gminawerbkowice gminawiazow gminawiazowna gminawicko @@ -2153,16 +2492,21 @@ gminawielbark gminawielen gminawielgie + gminawielgomlyny gminawieliszew gminawielkanieszawka gminawieniawa gminawieprz gminawieruszow + gminawierzbinek gminawierzbno + gminawierzchlas gminawierzchoslawice gminawietrzychowice gminawijewo + gminawilczyce gminawilczyn + gminawilkolaz gminawilkow gminawilkowice gminawinnica @@ -2173,12 +2517,14 @@ gminawitkowo gminawladyslawow gminawlen + gminawloclawek gminawlodawa gminawloszczowa gminawodzierady gminawodzislaw gminawojcieszkow gminawojnicz + gminawojslawice gminawolakrzysztoporska gminawolanow gminawolbrom @@ -2189,15 +2535,18 @@ gminawreczycawielka gminawronki gminawyrzysk - gminazabierzow + gminawysokie gminazabno gminazagan - gminazagorz + gminazagorow gminazaklikow gminazakroczym gminazakrzowek + gminazalesie gminazaleszany + gminazaluski gminazamosc + gminazarnow gminazarnowiec gminazarow gminazarszyn @@ -2209,20 +2558,26 @@ gminazbojno gminazbroslawice gminazdunskawola - gminazduny gminazdzieszowice + gminazebowice gminazebrzydowice + gminazegocina gminazelazkow + gminazembrzyce gminazgierz gminazgorzelec gminaziebice gminazielonki gminazlawieswielka + gminazlota + gminazlotnikikujawskie gminazmudz gminaznin gminazolkiewka gminazolynia gminazukowice + gminazurawica + gminazyrakow gminazyrzyn gminazytno gniezno @@ -2231,19 +2586,19 @@ gora gorakalwaria gorlice + gorzno gorzowslaski gorzowwielkopolski gostynin grajewo grodziskmazowiecki - gronowoelblaskie grudziadz + grybow gryfino gryfowslaski hel hrubieszow inowroclaw - iwanowice izbicakujawska jablonowopomorskie janowiecwielkopolski @@ -2253,7 +2608,6 @@ jaslo jastrzebiezdroj jawor - jaworzno jedlinazdroj jelczlaskowice jeleniagora @@ -2274,9 +2628,9 @@ kepno ketrzyn kielce - kielczyglow klodawa klodzko + kluczbork knurow kobylka kolo @@ -2306,11 +2660,13 @@ krzeszowice krzyzwielkopolski ksiazwielkopolski - kudowazdroj kujawskopomorskie + kutno kuzniaraciborska + kwidzyn labiszyn ladekzdroj + lancut lapy lask laskarzew @@ -2322,10 +2678,10 @@ legnica leszno lewinbrzeski + lewinbrzeski2 lezajsk limanowa lipno - lipsko lodz lodzkie lowicz @@ -2342,11 +2698,8 @@ lwowekslaski malbork malopolskie - marciszow marki - maslowice mazowieckie - miastko michalowice miechow miedzyrzecpodlaski @@ -2354,6 +2707,7 @@ mielec milanowek minskmazowiecki + mniszkow mosina mragowo mragowski @@ -2363,18 +2717,17 @@ myslowice myszkow naklonadnotecia - nasielsk niemodlin niepolomice nisko nowadeba nowasarzyna + nowasol nowemiasteczko noweskalmierzyce nowogard nowogrodbobrzanski nowogrodziec - nowosolna nowydwormazowiecki nowysacz nowytarg @@ -2388,6 +2741,8 @@ opoczno opole opolelubelskie + opolskie + orzesze osieczna osiecznica ostroda @@ -2405,13 +2760,16 @@ piekaryslaskie piensk pila + pilzno piotrkowtrybunalski pisz plock plonsk pniewy + pobiedziska podkarpackie podkowalesna + podlaskie polczynzdroj pomorskie poniec @@ -2420,7 +2778,7 @@ powiataugustowski powiatbedzinski powiatbelchatowski - powiatbialobrzeski + powiatbialostocki powiatbialski powiatbielski powiatbieszczadzki @@ -2446,6 +2804,7 @@ powiatczluchowski powiatdabrowski powiatdebicki + powiatdrawski powiatdzialdowski powiatdzierzoniowski powiatelblaski @@ -2460,10 +2819,11 @@ powiatgoleniowski powiatgolubskodobrzynski powiatgorlicki + powiatgorowski powiatgorzowski powiatgostynski + powiatgrajewski powiatgrojecki - powiatgrudziadzki powiatgryficki powiatgryfinski powiathajnowski @@ -2478,6 +2838,7 @@ powiatjedrzejowski powiatjeleniogorski powiatkaliski + powiatkamiennogorski powiatkamienski powiatkartuski powiatkazimierski @@ -2502,6 +2863,7 @@ powiatkrosnienski powiatkrotoszynski powiatkutnowski + powiatlancucki powiatlaski powiatleborski powiatleczycki @@ -2516,6 +2878,7 @@ powiatlipski powiatlobeski powiatlodzkiwschodni + powiatlosicki powiatlowicki powiatlubaczowski powiatlubanski @@ -2536,9 +2899,11 @@ powiatmyslenicki powiatmyszkowski powiatnakielski + powiatnamyslowski powiatnidzicki powiatnizanski powiatnowodworski + powiatnowomiejski powiatnowosadecki powiatnowosolski powiatnowotarski @@ -2574,7 +2939,6 @@ powiatproszowicki powiatprudnicki powiatpruszkowski - powiatprzasnyski powiatprzemyski powiatprzeworski powiatprzysuski @@ -2597,6 +2961,7 @@ powiatrzeszowski powiatsandomierski powiatsanocki + powiatsejnenski powiatsepolenski powiatsiedlecki powiatsiemiatycki @@ -2624,6 +2989,7 @@ powiatswidnicki powiatswidwinski powiatswiebodzinski + powiatswiecki powiatszamotulski powiatszczycienski powiatsztumski @@ -2642,6 +3008,7 @@ powiatwagrowiecki powiatwalecki powiatwarszawskizachodni + powiatwegorzewski powiatwegrowski powiatwejherowski powiatwielicki @@ -2661,7 +3028,6 @@ powiatwyszkowski powiatzabkowicki powiatzaganski - powiatzambrowski powiatzamojski powiatzarski powiatzawiercianski @@ -2672,34 +3038,33 @@ powiatzlotoryjski powiatzlotowski powiatzninski - powiatzurominski powiatzyrardowski powiatzywiecki poznan - prostki proszowice prudnik + pruszczgdanski pruszkow przasnysz przemysl przeworsk przysucha pszczyna - pszow puck pulawy + pultusk + puszczykowo pyskowice rabkazdroj raciaz raciborz - raciechowice radom radomsko + radomyslwielki radymno radziejow radzionkow radzynpodlaski - rakow rawamazowiecka rawicz reda @@ -2713,6 +3078,7 @@ rymanow rypin rzeszow + rzeszowprojekt sandomierz sanok sedziszowmalopolski @@ -2720,7 +3086,6 @@ siedlce siemianowiceslaskie siemiatycze - sieniawa sieradz skarzyskokamienna skawina @@ -2739,17 +3104,15 @@ srodaslaska srodawielkopolska starachowice + stargard starogardgdanski starysacz staszow stronieslaskie - strzegom strzyzow - suchylas sulejowek sulkowice sulmierzyce - suwalski swarzedz swidnica swidnik @@ -2772,8 +3135,10 @@ terespol tomaszowlubelski tomaszowmazowiecki + tomaszowmazowieckiprojekt torun trzcianka + trzcinskozdroj trzebnica trzemeszno tuliszkow @@ -2786,7 +3151,7 @@ ustrzykidolne wadowice wagrowiec - walbrzych + walcz warminskomazurskie warszawa wasosz @@ -2795,7 +3160,7 @@ wiecbork wieliczka wielkopolskie - wizna + wielun wladyslawowo wloclawek wlodawa @@ -2824,6 +3189,7 @@ zielonagora zielonka zlotoryja + zlotow zory zwolen zyrardow diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt index cc31d893..18249ba8 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt @@ -3,6 +3,7 @@ package io.github.wulkanowy.data.db.migrations import android.content.Context import androidx.preference.PreferenceManager import androidx.room.Room +import androidx.room.migration.Migration import androidx.room.testing.MigrationTestHelper import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider @@ -16,7 +17,7 @@ abstract class AbstractMigrationTest { val dbName = "migration-test" - val context: Context get() = ApplicationProvider.getApplicationContext() + private val context: Context get() = ApplicationProvider.getApplicationContext() @get:Rule val helper: MigrationTestHelper = MigrationTestHelper( @@ -25,6 +26,10 @@ abstract class AbstractMigrationTest { FrameworkSQLiteOpenHelperFactory() ) + fun runMigrationsAndValidate(migration: Migration) { + helper.runMigrationsAndValidate(dbName, migration.endVersion, true, migration).close() + } + fun getMigratedRoomDatabase(): AppDatabase { val database = Room.databaseBuilder( ApplicationProvider.getApplicationContext(), diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt index a0290473..f614c8ca 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt @@ -33,7 +33,7 @@ class Migration12Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 12, true, Migration12()) + runMigrationsAndValidate(Migration12()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -49,6 +49,7 @@ class Migration12Test : AbstractMigrationTest() { assertEquals(2, studentId) assertEquals(6, classId) } + db.close() } @Test @@ -62,7 +63,7 @@ class Migration12Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 12, true, Migration12()) + runMigrationsAndValidate(Migration12()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -73,6 +74,7 @@ class Migration12Test : AbstractMigrationTest() { assertEquals(2, studentId) assertEquals(1, classId) } + db.close() } @Test @@ -88,7 +90,7 @@ class Migration12Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 12, true, Migration12()) + runMigrationsAndValidate(Migration12()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -107,6 +109,7 @@ class Migration12Test : AbstractMigrationTest() { assertEquals(studentId, 3) assertEquals(true, isCurrent) } + db.close() } private fun createStudent(db: SupportSQLiteDatabase, studentId: Int, isCurrent: Boolean) { diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt index bdfb4137..b0c03fb1 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt @@ -57,6 +57,8 @@ class Migration13Test : AbstractMigrationTest() { assertEquals("C", className) assertEquals("Publiczna szkoła Wulkanowego-fejka nr 2 w fakelog.cf", schoolName) } + + db.close() } @Test @@ -85,6 +87,8 @@ class Migration13Test : AbstractMigrationTest() { assertEquals("", className) assertEquals("Publiczna szkoła Wulkanowego-fejka nr 1 w fakelog.cf", schoolName) } + + db.close() } @Test @@ -148,6 +152,7 @@ class Migration13Test : AbstractMigrationTest() { assertFalse(semesters[2].second) assertTrue(semesters[3].second) } + db.close() } private fun getSemesters(db: SupportSQLiteDatabase, query: String): List> { diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt index 8e744f27..19eda9ba 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt @@ -27,7 +27,7 @@ class Migration27Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 27, true, Migration27()) + runMigrationsAndValidate(Migration27()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -39,6 +39,8 @@ class Migration27Test : AbstractMigrationTest() { assertEquals(123, userLoginId) assertEquals("Student Jan", userName) } + + db.close() } @Test @@ -49,7 +51,7 @@ class Migration27Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 27, true, Migration27()) + runMigrationsAndValidate(Migration27()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -61,6 +63,8 @@ class Migration27Test : AbstractMigrationTest() { assertEquals(2, userLoginId) assertEquals("Unit Jan", userName) } + + db.close() } @Test @@ -73,7 +77,7 @@ class Migration27Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 27, true, Migration27()) + runMigrationsAndValidate(Migration27()) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -90,6 +94,8 @@ class Migration27Test : AbstractMigrationTest() { assertEquals(333, userLoginId) assertEquals("Unit Tomasz", userName) } + + db.close() } private fun createStudent(db: SupportSQLiteDatabase, id: Long, userLoginId: Int, studentName: String) { diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt index 883cdb81..79c24f2e 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt @@ -29,7 +29,7 @@ class Migration35Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 35, true, Migration35(AppInfo())) + runMigrationsAndValidate(Migration35(AppInfo())) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } @@ -38,6 +38,8 @@ class Migration35Test : AbstractMigrationTest() { assertTrue { students[0].avatarColor in AppInfo().defaultColorsForAvatar } assertTrue { students[1].avatarColor in AppInfo().defaultColorsForAvatar } + + db.close() } private fun createStudent(db: SupportSQLiteDatabase, id: Long) { diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration54Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration54Test.kt new file mode 100644 index 00000000..1855e0d5 --- /dev/null +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration54Test.kt @@ -0,0 +1,130 @@ +package io.github.wulkanowy.data.db.migrations + +import android.content.ContentValues +import android.database.sqlite.SQLiteDatabase +import android.os.Build +import androidx.sqlite.db.SupportSQLiteDatabase +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import io.github.wulkanowy.sdk.Sdk +import io.github.wulkanowy.sdk.Sdk.ScrapperLoginType.* +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import kotlin.random.Random +import kotlin.test.assertEquals + +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@OptIn(ExperimentalCoroutinesApi::class) +@Config(sdk = [Build.VERSION_CODES.O_MR1], application = HiltTestApplication::class) +class Migration54Test : AbstractMigrationTest() { + + @Test + fun `don't touch unrelated students`() = runTest { + with(helper.createDatabase(dbName, 53)) { + createStudent(1, STANDARD, "vulcan.net.pl", "rzeszow", "Jan Michniewicz") + createStudent(2, ADFSLight, "umt.tarnow.pl", "tarnow", "Joanna Marcinkiewicz") + close() + } + + runMigrationsAndValidate(Migration54()) + val db = getMigratedRoomDatabase() + val students = db.studentDao.loadAll() + + assertEquals(2, students.size) + with(students[0]) { + assertEquals(STANDARD.name, loginType) + assertEquals("https://vulcan.net.pl", scrapperBaseUrl) + assertEquals("rzeszow", symbol) + } + with(students[1]) { + assertEquals(ADFSLight.name, loginType) + assertEquals("https://umt.tarnow.pl", scrapperBaseUrl) + assertEquals("tarnow", symbol) + } + db.close() + } + + @Test + fun `remove tomaszow mazowiecki students`() = runTest { + with(helper.createDatabase(dbName, 53)) { + createStudent(1, STANDARD, "vulcan.net.pl", "rzeszow", "Jan Michniewicz") + createStudent(2, STANDARD, "vulcan.net.pl", "tomaszowmazowiecki", "Joanna Stec") + createStudent(3, STANDARD, "vulcan.net.pl", "tomaszowmazowiecki", "Kacper Morawiecki") + close() + } + + runMigrationsAndValidate(Migration54()) + val db = getMigratedRoomDatabase() + val students = db.studentDao.loadAll() + assertEquals(1, students.size) + with(students[0]) { + assertEquals("rzeszow", symbol) + } + db.close() + } + + @Test + fun `migrate resman students`() = runTest { + with(helper.createDatabase(dbName, 53)) { + createStudent(1, ADFSLight, "resman.pl", "rzeszow", "Joanna Stec") + createStudent(2, ADFSLight, "resman.pl", "rzeszow", "Kacper Morawiecki") + createStudent(3, STANDARD, "vulcan.net.pl", "rzeszow", "Jan Michniewicz") + close() + } + runMigrationsAndValidate(Migration54()) + val db = getMigratedRoomDatabase() + val students = db.studentDao.loadAll() + assertEquals(3, students.size) + with(students[0]) { + assertEquals(ADFSLightScoped.name, loginType) + assertEquals("https://vulcan.net.pl", scrapperBaseUrl) + assertEquals("rzeszowprojekt", symbol) + } + with(students[1]) { + assertEquals(ADFSLightScoped.name, loginType) + assertEquals("https://vulcan.net.pl", scrapperBaseUrl) + assertEquals("rzeszowprojekt", symbol) + } + db.close() + } + + private fun SupportSQLiteDatabase.createStudent( + id: Long, + loginType: Sdk.ScrapperLoginType, + host: String, + symbol: String, + studentName: String, + ) { + insert("Students", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply { + put("scrapper_base_url", "https://$host") + put("mobile_base_url", "") + put("login_type", loginType.name) + put("login_mode", "SCRAPPER") + put("certificate_key", "") + put("private_key", "") + put("is_parent", false) + put("email", "jan@fakelog.cf") + put("password", "******") + put("symbol", symbol) + put("student_id", Random.nextInt()) + put("user_login_id", id) + put("user_name", studentName) + put("student_name", studentName) + put("school_id", "123") + put("school_short", "") + put("school_name", "") + put("class_name", "") + put("class_id", Random.nextInt()) + put("is_current", false) + put("registration_date", "0") + put("id", id) + put("nick", "") + put("avatar_color", "") + }) + } +} diff --git a/build.gradle b/build.gradle index e8e1052b..174a3cb6 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,7 @@ allprojects { mavenCentral() google() maven { url "https://jitpack.io" } + maven { url "https://s01.oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://developer.huawei.com/repo/" } } }