diff --git a/backend/grant/user/models.py b/backend/grant/user/models.py index 961158d0..c0f224f3 100644 --- a/backend/grant/user/models.py +++ b/backend/grant/user/models.py @@ -124,17 +124,22 @@ class SocialMediaSchema(ma.Schema): model = SocialMedia # Fields to expose fields = ( + "url", "service", "username", ) + url = ma.Method("get_url") service = ma.Method("get_service") username = ma.Method("get_username") + def get_url(self, obj): + return obj.social_media_link + def get_service(self, obj): info = get_social_info_from_url(obj.social_media_link) return info['service'] - + def get_username(self, obj): info = get_social_info_from_url(obj.social_media_link) return info['username'] diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index cccee286..b81e9395 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -41,13 +41,9 @@ def get_me(): @blueprint.route("/", methods=["GET"]) @endpoint.api() def get_user(user_identity): - print('get by ident') user = User.get_by_identifier(email_address=user_identity, account_address=user_identity) - print(user) if user: - print('dumping') result = user_schema.dump(user) - print(result) return result else: message = "User with account_address or user_identity matching {} not found".format(user_identity) diff --git a/backend/grant/utils/social.py b/backend/grant/utils/social.py index ab05ceb3..a8c6432f 100644 --- a/backend/grant/utils/social.py +++ b/backend/grant/utils/social.py @@ -15,5 +15,5 @@ def get_social_info_from_url(url: str): if match: return { 'service': service, - 'username': match.group(1), + 'username': match.group(1) } diff --git a/backend/tests/user/test_user_api.py b/backend/tests/user/test_user_api.py index d60ae76f..e9006cca 100644 --- a/backend/tests/user/test_user_api.py +++ b/backend/tests/user/test_user_api.py @@ -44,7 +44,9 @@ class TestAPI(BaseUserConfig): users_json = users_get_resp.json self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) - self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') + self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') + self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_get_single_user_by_account_address(self): @@ -54,7 +56,9 @@ class TestAPI(BaseUserConfig): users_json = users_get_resp.json self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) - self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') + self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') + self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_create_user_duplicate_400(self): diff --git a/frontend/client/components/Profile/ProfileEdit.tsx b/frontend/client/components/Profile/ProfileEdit.tsx index f08251cb..6af8b3c4 100644 --- a/frontend/client/components/Profile/ProfileEdit.tsx +++ b/frontend/client/components/Profile/ProfileEdit.tsx @@ -2,7 +2,7 @@ import React from 'react'; import lodash from 'lodash'; import axios from 'api/axios'; import { Input, Form, Col, Row, Button, Alert } from 'antd'; -import { SOCIAL_INFO } from 'utils/social'; +import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social'; import { SOCIAL_SERVICE, User } from 'types'; import { UserState } from 'modules/users/reducers'; import { getCreateTeamMemberError } from 'modules/create/utils'; @@ -218,6 +218,7 @@ export default class ProfileEdit extends React.PureComponent { socialMedias.push({ service, username: value, + url: socialMediaToUrl(service, value), }); } diff --git a/frontend/client/components/Profile/ProfileUser.tsx b/frontend/client/components/Profile/ProfileUser.tsx index a660301b..cf775af6 100644 --- a/frontend/client/components/Profile/ProfileUser.tsx +++ b/frontend/client/components/Profile/ProfileUser.tsx @@ -6,7 +6,7 @@ import { usersActions } from 'modules/users'; import { UserState } from 'modules/users/reducers'; import ProfileEdit from './ProfileEdit'; import UserAvatar from 'components/UserAvatar'; -import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social'; +import { SOCIAL_INFO } from 'utils/social'; import ShortAddress from 'components/ShortAddress'; import './ProfileUser.less'; import { AppState } from 'store/reducers'; @@ -97,7 +97,7 @@ class ProfileUser extends React.Component { const Social = ({ socialMedia }: { socialMedia: SocialMedia }) => { return ( - +
{SOCIAL_INFO[socialMedia.service].icon}
diff --git a/frontend/client/utils/api.ts b/frontend/client/utils/api.ts index 0dbbfd52..3ed0a696 100644 --- a/frontend/client/utils/api.ts +++ b/frontend/client/utils/api.ts @@ -7,7 +7,7 @@ export function formatUserForPost(user: User) { return { ...user, avatar: user.avatar ? user.avatar.imageUrl : null, - socialMedias: user.socialMedias.map(socialMediaToUrl), + socialMedias: user.socialMedias.map(sm => socialMediaToUrl(sm.service, sm.username)), }; } diff --git a/frontend/client/utils/social.tsx b/frontend/client/utils/social.tsx index b7859474..b0a4ef2c 100644 --- a/frontend/client/utils/social.tsx +++ b/frontend/client/utils/social.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Icon } from 'antd'; import keybaseIcon from 'static/images/keybase.svg'; -import { SOCIAL_SERVICE, SocialMedia, SocialInfo } from 'types'; +import { SOCIAL_SERVICE, SocialInfo } from 'types'; const accountNameRegex = '([a-zA-Z0-9-_]*)'; export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = { @@ -31,6 +31,6 @@ export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = { }, }; -export function socialMediaToUrl(sm: SocialMedia): string { - return SOCIAL_INFO[sm.service].format.replace(accountNameRegex, sm.username); +export function socialMediaToUrl(service: SOCIAL_SERVICE, username: string): string { + return SOCIAL_INFO[service].format.replace(accountNameRegex, username); } diff --git a/frontend/types/social.ts b/frontend/types/social.ts index 4c99cec2..f585d04a 100644 --- a/frontend/types/social.ts +++ b/frontend/types/social.ts @@ -3,6 +3,7 @@ import React from 'react'; export type SocialAccountMap = Partial<{ [key in SOCIAL_SERVICE]: string }>; export interface SocialMedia { + url: string; service: SOCIAL_SERVICE; username: string; }