startend msg sending api thingie

This commit is contained in:
Kima 2023-12-10 20:37:40 +01:00
parent 3484230ced
commit adc8deffa9
3 changed files with 64 additions and 28 deletions

View File

@ -47,26 +47,26 @@ class KretaAPI {
KretaApiEndpoints.downloadHomeworkAttachments(uid, type); KretaApiEndpoints.downloadHomeworkAttachments(uid, type);
static String subjects(String iss, String uid) => static String subjects(String iss, String uid) =>
"${BaseKreta.kreta(iss)}${KretaApiEndpoints.subjects}?oktatasiNevelesiFeladatUid=$uid"; "${BaseKreta.kreta(iss)}${KretaApiEndpoints.subjects}?oktatasiNevelesiFeladatUid=$uid";
// Structure: // Structure:
// { // {
// "Uid": 000, // "Uid": 000,
// "Tantargy": { // "Tantargy": {
// "Uid": 000, // "Uid": 000,
// "Nev": "Irodalom", // "Nev": "Irodalom",
// "Kategoria": { // "Kategoria": {
// "Uid": "000,magyar_nyelv_es_irodalom", // "Uid": "000,magyar_nyelv_es_irodalom",
// "Nev": "magyar_nyelv_es_irodalom", // "Nev": "magyar_nyelv_es_irodalom",
// "Leiras": "Magyar nyelv és irodalom" // "Leiras": "Magyar nyelv és irodalom"
// }, // },
// "SortIndex": 0, // "SortIndex": 0,
// }, // },
// "Atlag": null, // float // "Atlag": null, // float
// "AtlagAlakulasaIdoFuggvenyeben": Array[], // no idea what this is // "AtlagAlakulasaIdoFuggvenyeben": Array[], // no idea what this is
// "SulyozottOsztalyzatOsszege": null, // int | float // "SulyozottOsztalyzatOsszege": null, // int | float
// "SulyozottOsztalyzatSzama": null, // int | float // "SulyozottOsztalyzatSzama": null, // int | float
// "SortIndex": 0 // "SortIndex": 0
// } // }
// refer to https://discord.com/channels/1111649116020285532/1111798771513303102/1148368925969612920 // refer to https://discord.com/channels/1111649116020285532/1111798771513303102/1148368925969612920
// ADMIN API // ADMIN API
static const sendMessage = static const sendMessage =
@ -118,7 +118,8 @@ class KretaApiEndpoints {
static const capabilities = "/ellenorzo/V3/Sajat/Intezmenyek"; static const capabilities = "/ellenorzo/V3/Sajat/Intezmenyek";
static String downloadHomeworkAttachments(String uid, String type) => static String downloadHomeworkAttachments(String uid, String type) =>
"/ellenorzo/V3/Sajat/Csatolmany/$uid"; "/ellenorzo/V3/Sajat/Csatolmany/$uid";
static const subjects = "/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/TantargyiAtlagok"; static const subjects =
"/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/TantargyiAtlagok";
} }
class KretaAdminEndpoints { class KretaAdminEndpoints {

View File

@ -139,6 +139,9 @@ class KretaClient {
if (!headerMap.containsKey("content-type")) { if (!headerMap.containsKey("content-type")) {
headerMap["content-type"] = "application/json"; headerMap["content-type"] = "application/json";
} }
if (url.contains('kommunikacio/uzenetek')) {
headerMap["X-Uzenet-Lokalizacio"] = "hu-HU";
}
} }
res = await client.post(Uri.parse(url), headers: headerMap, body: body); res = await client.post(Uri.parse(url), headers: headerMap, body: body);

View File

@ -27,27 +27,33 @@ class MessageProvider with ChangeNotifier {
// Load messages from the database // Load messages from the database
if (userId != null) { if (userId != null) {
var dbMessages = await Provider.of<DatabaseProvider>(_context, listen: false).userQuery.getMessages(userId: userId); var dbMessages =
await Provider.of<DatabaseProvider>(_context, listen: false)
.userQuery
.getMessages(userId: userId);
_messages = dbMessages; _messages = dbMessages;
notifyListeners(); notifyListeners();
} }
} }
// Fetches all types of Messages // Fetches all types of Messages
Future<void> fetchAll() => Future.forEach(MessageType.values, (MessageType v) => fetch(type: v)); Future<void> fetchAll() =>
Future.forEach(MessageType.values, (MessageType v) => fetch(type: v));
// Fetches Messages from the Kreta API then stores them in the database // Fetches Messages from the Kreta API then stores them in the database
Future<void> fetch({MessageType type = MessageType.inbox}) async { Future<void> fetch({MessageType type = MessageType.inbox}) async {
// Check Message Type // Check Message Type
if (type == MessageType.draft) return; if (type == MessageType.draft) return;
String messageType = ["beerkezett", "elkuldott", "torolt"].elementAt(type.index); String messageType =
["beerkezett", "elkuldott", "torolt"].elementAt(type.index);
// Check User // Check User
User? user = Provider.of<UserProvider>(_context, listen: false).user; User? user = Provider.of<UserProvider>(_context, listen: false).user;
if (user == null) throw "Cannot fetch Messages for User null"; if (user == null) throw "Cannot fetch Messages for User null";
// Get messages // Get messages
List? messagesJson = await Provider.of<KretaClient>(_context, listen: false).getAPI(KretaAPI.messages(messageType)); List? messagesJson = await Provider.of<KretaClient>(_context, listen: false)
.getAPI(KretaAPI.messages(messageType));
if (messagesJson == null) throw "Cannot fetch Messages for User ${user.id}"; if (messagesJson == null) throw "Cannot fetch Messages for User ${user.id}";
// Parse messages // Parse messages
@ -55,8 +61,12 @@ class MessageProvider with ChangeNotifier {
await Future.wait(List.generate(messagesJson.length, (index) { await Future.wait(List.generate(messagesJson.length, (index) {
return () async { return () async {
Map message = messagesJson.cast<Map>()[index]; Map message = messagesJson.cast<Map>()[index];
Map? messageJson = await Provider.of<KretaClient>(_context, listen: false).getAPI(KretaAPI.message(message["azonosito"].toString())); Map? messageJson =
if (messageJson != null) messages.add(Message.fromJson(messageJson, forceType: type)); await Provider.of<KretaClient>(_context, listen: false)
.getAPI(KretaAPI.message(message["azonosito"].toString()));
if (messageJson != null) {
messages.add(Message.fromJson(messageJson, forceType: type));
}
}(); }();
})); }));
@ -73,8 +83,30 @@ class MessageProvider with ChangeNotifier {
if (user == null) throw "Cannot store Messages for User null"; if (user == null) throw "Cannot store Messages for User null";
String userId = user.id; String userId = user.id;
await Provider.of<DatabaseProvider>(_context, listen: false).userStore.storeMessages(_messages, userId: userId); await Provider.of<DatabaseProvider>(_context, listen: false)
.userStore
.storeMessages(_messages, userId: userId);
notifyListeners(); notifyListeners();
} }
// fetch recipients
Future<void> fetchRecipients() async {
// check user
User? user = Provider.of<UserProvider>(_context, listen: false).user;
if (user == null) throw "Cannot fetch Messages for User null";
// get recipients
List? recipientsJson =
await Provider.of<KretaClient>(_context, listen: false)
.getAPI(KretaAPI.recipientsTeacher);
if (recipientsJson == null) {
throw "Cannot fetch Recipients for User ${user.id}";
}
print(recipientsJson);
}
// send message
Future<void> sendMessage() async {}
} }