// POST api/registration public HttpResponseMessage Post(AuthenticationData value) { // checking whether new user already exist on database or not var subquery = from u in container.UserProfiles join p in container.webpages_Membership on u.UserId equals p.UserId where u.UserName == value.Email select u.UserId; var checkUser = (from t1 in container.STEPPY_API_m_user where subquery.Contains(t1.id_user_shesop) select t1).ToList(); if (checkUser.Count != 0) { return(Request.CreateResponse <string>(HttpStatusCode.Forbidden, "User already exist!")); } //create new user and then save to database shesop UserProfile newUserProfile = new UserProfile() { UserName = value.Email, NoTelp = value.TelpNumber, Umur = value.Age, BeratBadan = value.Weight, Tinggi = value.Height, JenisKelamin = value.Gender }; container.UserProfiles.Add(newUserProfile); container.SaveChanges(); webpages_Membership newUserWebpages = new webpages_Membership() { UserId = newUserProfile.UserId, IsConfirmed = true, Password = HashingPassword(value.Password), PasswordFailuresSinceLastSuccess = 0, PasswordSalt = "", PasswordVerificationToken = "", CreateDate = DateTime.Now, PasswordChangedDate = DateTime.Now, }; container.webpages_Membership.Add(newUserWebpages); container.SaveChanges(); webpages_UsersInRoles newUserRole = new webpages_UsersInRoles() { UserId = newUserProfile.UserId, RoleId = 3, }; container.webpages_UsersInRoles.Add(newUserRole); container.SaveChanges(); DCHANNEL_User_Patient profile = new DCHANNEL_User_Patient() { Patient_Name = newUserProfile.UserName, User_Id = newUserProfile.UserId, Email = newUserProfile.UserName, Join_date = DateTime.Now, generated_guid = Guid.NewGuid().ToString() }; container.DCHANNEL_User_Patient.Add(profile); container.SaveChanges(); //end of create new user and then save to database shesop // register to table user steppy STEPPY_API_m_user newUser = new STEPPY_API_m_user() { display_name = value.DisplayName, password = newUserWebpages.Password, telp_number = value.TelpNumber, join_date = DateTime.Now, last_login = DateTime.Now, id_user_shesop = newUserWebpages.UserId //id_country = countryData.id_country }; container.STEPPY_API_m_user.Add(newUser); container.SaveChanges(); //create new token data STEPPY_API_t_security_token tokenData = container.STEPPY_API_t_security_token.Create(); tokenData.id_user = newUser.id_user; tokenData.request_date = DateTime.Now; tokenData.expired_date = DateTime.Now.AddMonths(2); tokenData.is_logout = false; tokenData.security_token = Guid.NewGuid().ToString(); container.STEPPY_API_t_security_token.Add(tokenData); container.SaveChanges(); // create user profile STEPPY_API_t_user_profile newProfile = container.STEPPY_API_t_user_profile.Create(); newProfile.id_user = newUser.id_user; newProfile.hi_score = 0; newProfile.current_level = 1; newProfile.current_experience = 0; newProfile.next_level_experience = 100; newProfile.gold = 0; newProfile.diamond = 0; newProfile.current_score = 0; container.STEPPY_API_t_user_profile.Add(newProfile); container.SaveChanges(); // get all friends data var friends = container.STEPPY_API_v_user_friend.Where <STEPPY_API_v_user_friend>(friend => friend.id_user == tokenData.id_user).ToList(); var frienddto = (from fr in friends join pf in container.STEPPY_API_t_user_profile on fr.id_user equals pf.id_user select new FriendDataDTO { IdUser = fr.id_user, FriendIdUser = fr.friend_id_user, DisplayName = fr.display_name, HiScore = pf.hi_score, Level = pf.current_level, TelpNumber = fr.telp_number, FriendDetailUrl = Url.Link("TransactApi", new { controller = "friend", token = tokenData.security_token, id = fr.id_contact }), IdContact = fr.id_contact }).ToList(); //create user data to be transferred to cient UserDataDTO userdto = new UserDataDTO() { IdUser = newUser.id_user, IdUserShesop = newUser.id_user_shesop, Email = newUserProfile.UserName, DisplayName = newUser.display_name, TelpNumber = newUser.telp_number, Gender = newUserProfile.JenisKelamin, Age = newUserProfile.Umur, Weight = newUserProfile.BeratBadan, Height = newUserProfile.Tinggi, JoinDate = newUser.join_date, Token = tokenData.security_token, /*UserContacts = container.STEPPY_API_m_contact * .Select(c => new UserContactDTO() * { * IdContact = c.id_contact, * TelpNumber = c.telp_number * }).ToList(),*/ FriendProfiles = frienddto, Profile = new ProfileDTO() { IdUser = newProfile.id_user, IdProfile = newProfile.id_profile, DisplayName = newUser.display_name, HiScore = newProfile.hi_score, CurrentLevel = newProfile.current_level, CurrentExperience = newProfile.current_experience, NextLevelExperience = newProfile.next_level_experience, Gold = newProfile.gold, CurrentScore = newProfile.current_score, Diamond = newProfile.diamond }, FriendsUrl = Url.Link("TransactApi", new { controller = "friend", token = tokenData.security_token }), ProfileUrl = Url.Link("TransactApi", new { controller = "profile", token = tokenData.security_token }), }; /* * //update registration status of this new user in contact info * SqlParameter[] sqlParams = new SqlParameter[2]; * sqlParams[0] = new SqlParameter("@telp_number", newUser.telp_number); * sqlParams[1] = new SqlParameter("@countrycode", countryData.country_phone_prefix); * int effected = container.Database.ExecuteSqlCommand("UPDATE STEPPY_API_m_contact SET is_registered = 1 WHERE telp_number = '0' + @telp_number OR telp_number = @countrycode + @telp_number", * sqlParams);*/ var response = Request.CreateResponse <UserDataDTO>(HttpStatusCode.Created, userdto); return(response); }
// POST api/authentication public HttpResponseMessage Post(AuthenticationData value) { //check if username exist in database web sheshop var subquery = from u in container.UserProfiles join p in container.webpages_Membership on u.UserId equals p.UserId where u.UserName == value.Email select u.UserId; //check if username exist in steppy user table var user = (from t1 in container.STEPPY_API_m_user where subquery.Contains(t1.id_user_shesop) select t1).ToList(); //if user exist in web shesop but not yet exist in steppy user table if ((subquery.ToList().Count > 0) && (user.Count == 0)) { //get data user from shesop db var checkUser = container.UserProfiles.Where <UserProfile>(x => x.UserName == value.Email).ToList(); if (checkUser.Count > 0) { STEPPY_API_m_user newUser = new STEPPY_API_m_user() { display_name = checkUser.First().UserName, password = HashingPassword(value.Password), telp_number = checkUser.First().NoTelp, join_date = DateTime.Now, last_login = DateTime.Now, id_user_shesop = checkUser.First().UserId }; container.STEPPY_API_m_user.Add(newUser); container.SaveChanges(); //create new token data STEPPY_API_t_security_token _tokenData = container.STEPPY_API_t_security_token.Create(); _tokenData.id_user = newUser.id_user; _tokenData.request_date = DateTime.Now; _tokenData.expired_date = DateTime.Now.AddMonths(2); _tokenData.is_logout = false; _tokenData.security_token = Guid.NewGuid().ToString(); container.STEPPY_API_t_security_token.Add(_tokenData); container.SaveChanges(); // create user profile steppy STEPPY_API_t_user_profile newProfile = container.STEPPY_API_t_user_profile.Create(); newProfile.id_user = newUser.id_user; newProfile.hi_score = 0; newProfile.current_level = 1; newProfile.current_experience = 0; newProfile.next_level_experience = 100; newProfile.gold = 0; newProfile.diamond = 0; newProfile.current_score = 0; container.STEPPY_API_t_user_profile.Add(newProfile); container.SaveChanges(); //recheck user count user = (from t1 in container.STEPPY_API_m_user where subquery.Contains(t1.id_user_shesop) select t1).ToList(); } } //if no user found, return null if (user.Count == 0) { throw new HttpResponseException(HttpStatusCode.NotFound); } if (!Crypto.VerifyHashedPassword(user[0].password, value.Password)) { throw new HttpResponseException(HttpStatusCode.NotFound); } //updating last_login m_user info var userFound = user.First(); userFound.last_login = DateTime.Now; var userd = (from u in container.UserProfiles where u.UserId == userFound.id_user_shesop select u).ToList().First(); //set old token is_log out true STEPPY_API_t_security_token tokenData; var oldToken = container.STEPPY_API_t_security_token.Where <STEPPY_API_t_security_token>(x => x.is_logout == false && x.expired_date > DateTime.Now && x.id_user == userFound.id_user).ToList(); if (oldToken.Count != 0) { tokenData = oldToken.First(); } else { //generate new security token tokenData = new STEPPY_API_t_security_token(); tokenData.id_user = userFound.id_user; tokenData.request_date = DateTime.Now; tokenData.expired_date = DateTime.Now.AddMonths(2); tokenData.is_logout = false; tokenData.security_token = Guid.NewGuid().ToString(); container.STEPPY_API_t_security_token.Add(tokenData); } // save all changes container.SaveChanges(); var profile = container.STEPPY_API_t_user_profile.Where(x => x.id_user == tokenData.id_user).First(); // get all friends data var friends = container.STEPPY_API_v_user_friend.Where <STEPPY_API_v_user_friend>(friend => friend.id_user == tokenData.id_user).ToList(); var frienddto = (from fr in friends join pf in container.STEPPY_API_t_user_profile on fr.id_user equals pf.id_user select new FriendDataDTO { IdUser = fr.id_user, FriendIdUser = fr.friend_id_user, DisplayName = fr.display_name, HiScore = pf.hi_score, Level = pf.current_level, TelpNumber = fr.telp_number, FriendDetailUrl = Url.Link("TransactApi", new { controller = "friend", token = tokenData.security_token, id = fr.id_contact }), IdContact = fr.id_contact }).ToList(); //get game record var usergamedata = container.STEPPY_Gamification_Record.Where <STEPPY_Gamification_Record>(g => g.IdUserShesop == userFound.id_user_shesop).ToList(); List <GameDataDTO> usergamedto = new List <GameDataDTO>(); if (usergamedata.Count > 0) { usergamedto = (from d in usergamedata select new GameDataDTO { Id = d.Id, IdUserShesop = d.IdUserShesop, Date = d.Date, Mission1 = d.Mission1, Mission2 = d.Mission2, Mission3 = d.Mission3, Mission4 = d.Mission4, Point = d.Point, IdLevel = d.IdLevel }).ToList(); } else { var gdto = new GameDataDTO() { Mission1 = 0, Mission2 = 0, Mission3 = 0, Mission4 = 0, Point = 0, IdLevel = 0 }; usergamedto.Add(gdto); } //convert user data info into data tranferable object for easy client consuming var userdto = user.Select(x => new UserDataDTO() { IdUser = x.id_user, IdUserShesop = x.id_user_shesop, DisplayName = x.display_name, Email = userd.UserName, Gender = userd.JenisKelamin, Age = userd.Umur, Height = userd.Tinggi, Weight = userd.BeratBadan, TelpNumber = x.telp_number, JoinDate = x.join_date, /*UserContacts = x.STEPPY_API_m_contact * .Select(c => new UserContactDTO() * { * IdContact = c.id_contact, * TelpNumber = c.telp_number * }).ToList(),*/ FriendProfiles = frienddto, Token = tokenData.security_token, ExpiredDate = tokenData.expired_date, Profile = new ProfileDTO() { IdUser = profile.id_user, IdProfile = profile.id_profile, DisplayName = x.display_name, HiScore = profile.hi_score, CurrentLevel = profile.current_level, CurrentExperience = profile.current_experience, NextLevelExperience = profile.next_level_experience, CurrentScore = profile.current_score, Gold = profile.gold, Diamond = profile.diamond }, FriendsUrl = Url.Link("TransactApi", new { controller = "friend", token = tokenData.security_token }), ProfileUrl = Url.Link("TransactApi", new { controller = "profile", token = tokenData.security_token }), UserGameData = usergamedto.Last() } ).ToList(); return(Request.CreateResponse(HttpStatusCode.OK, userdto.First())); }