public static Dictionary<string, string> Login(UserData data) { using (var db = WebApiApplication.GetDB()) { var transaction = db.BeginTransaction(); string AccessToken, UserID, ResultCode, Message = null; try { var command = new SqlCommand(); command.Connection = db; command.Transaction = transaction; command.CommandText = @"USP_AuthLogin"; command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@FacebookID", data.FacebookID); command.Parameters.Add("@FacebookName", data.FacebookName); command.Parameters.Add("@FacebookPhotoURL", data.FacebookPhotoURL); command.Parameters.Add("@AccessToken", SqlDbType.VarChar, 500); command.Parameters["@AccessToken"].Direction = ParameterDirection.Output; command.Parameters.Add("@UserID", SqlDbType.BigInt); command.Parameters["@UserID"].Direction = ParameterDirection.Output; command.Parameters.Add("@ResultCode", SqlDbType.Int); command.Parameters["@ResultCode"].Direction = ParameterDirection.Output; command.Parameters.Add("@Message", SqlDbType.VarChar, 300); command.Parameters["@Message"].Direction = ParameterDirection.Output; command.ExecuteNonQuery(); AccessToken = command.Parameters["@AccessToken"].Value.ToString(); UserID = command.Parameters["@UserID"].Value.ToString(); ResultCode = command.Parameters["@ResultCode"].Value.ToString(); Message = command.Parameters["@Message"].Value.ToString(); transaction.Commit(); Dictionary<string, string> dict = new Dictionary<string, string>(); dict.Add("AccessToken", AccessToken); dict.Add("UserID", UserID); dict.Add("ResultCode", ResultCode); dict.Add("Message", Message); return dict; } catch (System.Exception ex) { Console.Write(ex.Message); transaction.Rollback(); throw ex; } } }
// POST /SignUp public Dictionary<string, string> Post(UserData User) { Dictionary<string, string> Json = AuthModel.Signup(User); return Json; }
// 데이터베이스에서 EXEC USP_User_Login 을 호출하고 결과를 정리해서 콘트롤러에 넘겨줌 public static LoginResult Login(UserData data) { // 데이터베이스 커넥션을 가져옴 using (var db = DB.GetDB()) { // 트랜즈액션을 시작합니다. var transaction = db.BeginTransaction(); // 반환할 결과 객체를 생성해 놓습니다. LoginResult result = new LoginResult(); try { // 스토어드 프로시져를 실행시키기 위해 명령을 준비합니다. var command = new SqlCommand(); command.Connection = db; command.Transaction = transaction; command.CommandText = @"USP_User_Login"; command.CommandType = CommandType.StoredProcedure; // 스토어드 프로시져에 전달할 파라미터를 정합니다. command.Parameters.Add("@FacebookID", data.FacebookID); command.Parameters.Add("@FacebookName", data.FacebookName); command.Parameters.Add("@FacebookPhotoURL", data.FacebookPhotoURL); command.Parameters.Add("@AccessToken", SqlDbType.VarChar, 500); command.Parameters["@AccessToken"].Direction = ParameterDirection.Output; command.Parameters.Add("@UserID", SqlDbType.BigInt); command.Parameters["@UserID"].Direction = ParameterDirection.Output; command.Parameters.Add("@ResultCode", SqlDbType.Int); command.Parameters["@ResultCode"].Direction = ParameterDirection.Output; command.Parameters.Add("@Message", SqlDbType.VarChar, 300); command.Parameters["@Message"].Direction = ParameterDirection.Output; // 스토어드 프로시져를 실행시킵니다. command.ExecuteNonQuery(); // 스토어드 프로시져로부터 반환된 결과를 정리합니다. data.AccessToken = command.Parameters["@AccessToken"].Value.ToString(); data.UserID = (Int64)command.Parameters["@UserID"].Value; // 반환할 데이터에 AccessToken과 UserID를 넣기 위해 UserData에 입력합니다. result.Data = data; // 스토어드 프로시져가 잘 실행됬는 지 확인할 수 있는 ResultCode와 Message를 반환 데이터에 명시합니다. result.ResultCode = (int)command.Parameters["@ResultCode"].Value; result.Message = command.Parameters["@Message"].Value.ToString(); // 트랜즈액션을 커밋합니다. transaction.Commit(); return result; } catch (System.Exception ex) { // 에러가 발생하면 트랜즈액션을 롤백합니다. transaction.Rollback(); throw ex; } } }
/* URL : /Login Method : POST Body : { "FacebookID":"12323", "FacebookName":"Chris", "FacebookPhotoURL":"http://www.google.com" } 내용 : 페이스북 정보를 활용해서 게임 서버에 로그인하는 API */ public LoginResult Post(UserData User) { LoginResult result = LoginModel.Login(User); return result; }
// 데이터베이스에서 EXEC USP_User_Login 을 호출하고 결과를 정리해서 콘트롤러에 넘겨줌 public static UserResult Select(Int64 UserID) { // 데이터베이스 커넥션을 가져옴 using (var db = DB.GetDB()) { // 트랜즈액션을 시작합니다. //var transaction = db.BeginTransaction(); // 반환할 결과 객체를 생성해 놓습니다. UserResult result = new UserResult(); try { // 스토어드 프로시져를 실행시키기 위해 명령을 준비합니다. var command = new SqlCommand(); command.Connection = db; //command.Transaction = transaction; command.CommandText = @"USP_User_Select"; command.CommandType = CommandType.StoredProcedure; // 스토어드 프로시져에 전달할 파라미터를 정합니다. command.Parameters.Add("@UserID", UserID); command.Parameters.Add("@ResultCode", SqlDbType.Int); command.Parameters["@ResultCode"].Direction = ParameterDirection.Output; command.Parameters.Add("@Message", SqlDbType.VarChar, 300); command.Parameters["@Message"].Direction = ParameterDirection.Output; // 스토어드 프로시져를 실행시킵니다. var reader = command.ExecuteReader(); UserData data = new UserData(); // 스토어드 프로시져로부터 반환된 결과를 정리합니다. if (reader.Read()) { data.UserID = (Int64)reader["UserID"]; data.FacebookID = reader["FacebookID"].ToString(); data.FacebookName = reader["FacebookName"].ToString(); data.FacebookPhotoURL = reader["FacebookPhotoURL"].ToString(); data.Point = (int)reader["Point"]; data.Diamond = (int)reader["Diamond"]; data.Level = (int)reader["Level"]; data.Experience = (int)reader["Experience"]; data.ExpAfterLastLevel = (int)reader["ExpAfterLastLevel"]; data.ExpForNextLevel = (int)reader["ExpForNextLevel"]; data.Damage = (int)reader["Damage"]; data.Health = (int)reader["Health"]; data.Speed = (int)reader["Speed"]; data.Defense = (int)reader["Defense"]; data.DamageLevel = (int)reader["DamageLevel"]; data.HealthLevel = (int)reader["HealthLevel"]; data.SpeedLevel = (int)reader["SpeedLevel"]; data.DefenseLevel = (int)reader["DefenseLevel"]; } result.Data = data; reader.Close(); // 스토어드 프로시져가 잘 실행됬는 지 확인할 수 있는 ResultCode와 Message를 반환 데이터에 명시합니다. result.ResultCode = (int)command.Parameters["@ResultCode"].Value; result.Message = command.Parameters["@Message"].Value.ToString(); // 트랜즈액션을 커밋합니다. //transaction.Commit(); return result; } catch (System.Exception ex) { // 에러가 발생하면 트랜즈액션을 롤백합니다. //transaction.Rollback(); throw ex; } } }