parent
17db6cc152
commit
348e43778d
|
@ -87,6 +87,9 @@ const news = await api.getNews(children[0])
|
|||
|
||||
// Get menu
|
||||
const menu = await api.getMenu(children[0])
|
||||
|
||||
// Get notifications
|
||||
const notifications = await api.getNotifications(children[0])
|
||||
```
|
||||
|
||||
### Setting session cookie
|
||||
|
|
|
@ -4,7 +4,7 @@ import {
|
|||
CalendarItem, Child, Classmate, Fetch, RequestInit,
|
||||
} from './types'
|
||||
import {
|
||||
etjanst, child, calendarItem, classmate,
|
||||
etjanst, child, calendarItem, classmate, notification,
|
||||
} from './parse'
|
||||
|
||||
export const list = (fetch: Fetch, init?: RequestInit) => async (): Promise<Child[]> => {
|
||||
|
@ -41,6 +41,12 @@ export const menu = (fetch: Fetch, init?: RequestInit) => async (childId: string
|
|||
const url = routes.menu(childId)
|
||||
const response = await fetch(url, init)
|
||||
const data = await response.json()
|
||||
console.log(data)
|
||||
return etjanst(data)
|
||||
}
|
||||
|
||||
export const notifications = (fetch: Fetch, init?: RequestInit) => async (childId: string): Promise<Notification[]> => {
|
||||
const url = routes.notifications(childId)
|
||||
const response = await fetch(url, init)
|
||||
const data = await response.json()
|
||||
return etjanst(data).map(notification)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import {
|
|||
CalendarItem, Child, Classmate, Fetch, MenuItem, RequestInit,
|
||||
} from './types'
|
||||
import {
|
||||
calendar, classmates, list, menu, schedule,
|
||||
calendar, classmates, list, menu, notifications, schedule,
|
||||
} from './children'
|
||||
import { news, News } from './news'
|
||||
import { user } from './user'
|
||||
|
@ -85,6 +85,11 @@ export class Api extends EventEmitter {
|
|||
return data
|
||||
}
|
||||
|
||||
async getNotifications(child: Child): Promise<Notification[]> {
|
||||
const data = notifications(this.fetch, this.session)(child.sdsId)
|
||||
return data
|
||||
}
|
||||
|
||||
async logout() {
|
||||
this.session = undefined
|
||||
await this.clearCookies()
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
import * as moment from 'moment'
|
||||
import {
|
||||
etjanst, newsItem, EtjanstResponse, child, calendarItem, classmate, scheduleItem, menuItem, user,
|
||||
etjanst,
|
||||
newsItem,
|
||||
EtjanstResponse,
|
||||
child,
|
||||
calendarItem,
|
||||
classmate,
|
||||
scheduleItem,
|
||||
menuItem,
|
||||
user,
|
||||
notification,
|
||||
} from "./parse"
|
||||
import { NewsItem } from "./types"
|
||||
|
||||
|
@ -329,5 +338,60 @@ describe('parse', () => {
|
|||
})
|
||||
})
|
||||
})
|
||||
describe('notifications', () => {
|
||||
beforeEach(() => {
|
||||
response = {
|
||||
Success: true,
|
||||
Error: null,
|
||||
Data: [
|
||||
{
|
||||
Notification: {
|
||||
Messageid: 'E2E3A567-307F-4859-91BA-31B1F4522A7B',
|
||||
Messagecorrelationid: 'BB54DC8E-BB02-49A5-9806-4A2433031AA7',
|
||||
Message: '{"messages":{"message":{"messageid":"E2E3A567-307F-4859-91BA-31B1F4522A7B","messagecorrelationid":"BB54DC8E-BB02-49A5-9806-4A2433031AA7","messagetext":"Betygen är publicerade.","messagesubject":"Betyg klara","messagetime":"2020-12-18T15:59:43.195","linkbackurl":"https://elevdokumentation.stockholm.se/loa3/gradesStudent.do","sender":{"name":"Elevdokumentation"},"recipient":{"recipient":"195709227283","role":"Guardian"},"messagetype":{"type":"webnotify"},"system":"Elevdokumentation","participant":"BB7DE89D-D714-4EB2-85CD-36F9991E7C34"}}}',
|
||||
Readreceipt: false,
|
||||
Recipient: '195709227283',
|
||||
Id: 5880387,
|
||||
DateCreated: '2020-12-18T15:59:46.34',
|
||||
DateModified: '/Date(1608307186340)/',
|
||||
Role: 'Guardian',
|
||||
Participant: 'BB7DE89D-D714-4EB2-85CD-36F9991E7C34'
|
||||
},
|
||||
NotificationMessage: {
|
||||
Messages: {
|
||||
Message: {
|
||||
Messageid: 'E2E3A567-307F-4859-91BA-31B1F4522A7B',
|
||||
Messagecorrelationid: 'BB54DC8E-BB02-49A5-9806-4A2433031AA7',
|
||||
Messagetext: 'Betygen är publicerade.',
|
||||
Messagetime: '/Date(1608303583195)/',
|
||||
Linkbackurl: 'https://elevdokumentation.stockholm.se/loa3/gradesStudent.do',
|
||||
Category: null,
|
||||
Sender: { Name: 'Elevdokumentation' },
|
||||
Recipient: {
|
||||
RecipientRecipient: '195709227283',
|
||||
Role: 'Guardian',
|
||||
Schooltype: null
|
||||
},
|
||||
Messagetype: { Type: 'webnotify' },
|
||||
System: 'Elevdokumentation'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
it('parses notifications correctly', () => {
|
||||
expect(etjanst(response).map(notification)).toEqual([{
|
||||
id: 'E2E3A567-307F-4859-91BA-31B1F4522A7B',
|
||||
message: 'Betygen är publicerade.',
|
||||
sender: 'Elevdokumentation',
|
||||
url: 'https://elevdokumentation.stockholm.se/loa3/gradesStudent.do',
|
||||
dateCreated: moment(new Date('2020-12-18T15:59:46.34')),
|
||||
category: null,
|
||||
type: 'webnotify',
|
||||
}])
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
32
lib/parse.ts
32
lib/parse.ts
|
@ -2,7 +2,7 @@ import * as moment from 'moment'
|
|||
import * as h2m from 'h2m'
|
||||
import { htmlDecode } from 'js-htmlencode'
|
||||
import {
|
||||
CalendarItem, Child, Classmate, Guardian, MenuItem, NewsItem, ScheduleItem, User,
|
||||
CalendarItem, Child, Classmate, Guardian, MenuItem, NewsItem, ScheduleItem, User, Notification,
|
||||
} from './types'
|
||||
|
||||
const camel = require('camelcase-keys')
|
||||
|
@ -99,3 +99,33 @@ export const menuItem = ({
|
|||
title,
|
||||
description: htmlDecode(h2m(description)),
|
||||
})
|
||||
|
||||
export const notification = ({
|
||||
notification: {
|
||||
messageid,
|
||||
dateCreated,
|
||||
},
|
||||
notificationMessage: {
|
||||
messages: {
|
||||
message: {
|
||||
category,
|
||||
messagetext,
|
||||
linkbackurl,
|
||||
messagetype: {
|
||||
type,
|
||||
},
|
||||
sender: {
|
||||
name,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}: any): Notification => ({
|
||||
id: messageid,
|
||||
message: messagetext,
|
||||
sender: name,
|
||||
url: linkbackurl,
|
||||
dateCreated: moment(new Date(dateCreated)),
|
||||
category,
|
||||
type,
|
||||
})
|
||||
|
|
16
lib/types.ts
16
lib/types.ts
|
@ -105,12 +105,10 @@ export interface NewsItem {
|
|||
* @interface Notification
|
||||
*/
|
||||
export interface Notification {
|
||||
id?: string;
|
||||
sender?: {
|
||||
name?: string;
|
||||
};
|
||||
dateCreated?: string;
|
||||
message?: string;
|
||||
id: string
|
||||
sender: string
|
||||
dateCreated: Moment
|
||||
message: string
|
||||
/**
|
||||
* <p>
|
||||
* URL with the actual message as a webpage. Needs separate login.
|
||||
|
@ -119,9 +117,9 @@ export interface Notification {
|
|||
* @type {string}
|
||||
* @memberof Notification
|
||||
*/
|
||||
url?: string;
|
||||
category?: string;
|
||||
messageType?: string;
|
||||
url: string
|
||||
category: string | null
|
||||
type: string
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
14
run.js
14
run.js
|
@ -28,12 +28,12 @@ async function run() {
|
|||
api.on('login', async () => {
|
||||
console.log('Logged in')
|
||||
|
||||
console.log('user')
|
||||
const user = await api.getUser()
|
||||
console.log(user)
|
||||
// console.log('user')
|
||||
// const user = await api.getUser()
|
||||
// console.log(user)
|
||||
|
||||
// console.log('children')
|
||||
// const children = await api.getChildren()
|
||||
console.log('children')
|
||||
const children = await api.getChildren()
|
||||
// console.log(children)
|
||||
|
||||
// console.log('calendar')
|
||||
|
@ -56,6 +56,10 @@ async function run() {
|
|||
// const menu = await api.getMenu(children[0])
|
||||
// console.log(menu)
|
||||
|
||||
console.log('notifications')
|
||||
const notifications = await api.getNotifications(children[0])
|
||||
console.log(notifications)
|
||||
|
||||
await api.logout()
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue