public async Task <IActionResult> QueryMessagesContains([Required] int topic_id, [Required][FromBody] Range range)
        {
            //TODO 无需登录态验证
            //根据range来查找时间最近的几条message_id组成的列表
            //返回Json对象
            return(await Wrapper.wrap(async (OracleConnection conn) =>
            {
                //FUNC_QUERY_MESSAGE_BY_TOPIC(topic_id in INTEGER, startFrom in INTEGER, limitation in INTEGER, search_result out sys_refcursor)
                //return INTEGER
                string procudureName = "FUNC_QUERY_MESSAGE_BY_TOPIC";
                OracleCommand cmd = new OracleCommand(procudureName, conn);
                cmd.CommandType = CommandType.StoredProcedure;

                //Add return value
                OracleParameter p1 = new OracleParameter();
                p1 = cmd.Parameters.Add("state", OracleDbType.Int32);
                p1.Direction = ParameterDirection.ReturnValue;
                //Add input parameter follower_id
                OracleParameter p2 = new OracleParameter();
                p2 = cmd.Parameters.Add("topic_id", OracleDbType.Int32);
                p2.Direction = ParameterDirection.Input;
                p2.Value = topic_id;
                OracleParameter p3 = new OracleParameter();
                //Add input parameter be_followed_id
                p3 = cmd.Parameters.Add("startFrom", OracleDbType.Int32);
                p3.Value = range.startFrom;
                p3.Direction = ParameterDirection.Input;
                OracleParameter p4 = new OracleParameter();
                //Add input parameter be_followed_id
                p4 = cmd.Parameters.Add("limitation", OracleDbType.Int32);
                p4.Value = range.limitation;
                p4.Direction = ParameterDirection.Input;
                //Add input parameter search_result
                OracleParameter p5 = new OracleParameter();
                p5 = cmd.Parameters.Add("result", OracleDbType.RefCursor);
                p5.Direction = ParameterDirection.Output;

                OracleDataAdapter DataAdapter = new OracleDataAdapter(cmd);
                DataTable dt = new DataTable();
                await Task.FromResult(DataAdapter.Fill(dt));


                //dt: message_id
                MessageController.MessageForShow[] messages = new MessageController.MessageForShow[dt.Rows.Count];

                for (int i = 0; i < dt.Rows.Count; ++i)
                {
                    int message_id = int.Parse(dt.Rows[i][0].ToString());
                    messages[i] = await MessageController.InnerQuery(message_id);
                }

                RestfulResult.RestfulArray <MessageController.MessageForShow> rr = new RestfulResult.RestfulArray <MessageController.MessageForShow>();
                rr.Code = 200;
                rr.Message = "success";
                rr.Data = messages;

                return new JsonResult(rr);
            }));
        }
Пример #2
0
        private async Task <MessageController.MessageForShow[]> GetTwitterResults(OracleConnection conn, string searchKey, Range range)
        {
            //FUNC_SEARCH_MESSAGE(searchKey in VARCHAR2(50), startFrom in INTEGER, limitation in INTEGER, search_result out sys_refcursor)
            //return INTEGER
            string        procudureName = "FUNC_SEARCH_MESSAGE";
            OracleCommand cmd           = new OracleCommand(procudureName, conn);

            cmd.CommandType = CommandType.StoredProcedure;
            //Add return value
            OracleParameter p1 = new OracleParameter();

            p1           = cmd.Parameters.Add("state", OracleDbType.Int32);
            p1.Direction = ParameterDirection.ReturnValue;
            //Add input parameter user_id
            OracleParameter p2 = new OracleParameter();

            p2           = cmd.Parameters.Add("searchKey", OracleDbType.Varchar2);
            p2.Value     = searchKey;
            p2.Direction = ParameterDirection.Input;
            //Add input parameter follower_id
            OracleParameter p3 = new OracleParameter();

            //Add input parameter be_followed_id
            p3           = cmd.Parameters.Add("startFrom", OracleDbType.Int32);
            p3.Value     = range.startFrom;
            p3.Direction = ParameterDirection.Input;
            OracleParameter p4 = new OracleParameter();

            //Add input parameter be_followed_id
            p4           = cmd.Parameters.Add("limitation", OracleDbType.Int32);
            p4.Value     = range.limitation;
            p4.Direction = ParameterDirection.Input;
            //Add input parameter search_result
            OracleParameter p5 = new OracleParameter();

            p5           = cmd.Parameters.Add("search_result", OracleDbType.RefCursor);
            p5.Direction = ParameterDirection.Output;

            OracleDataAdapter DataAdapter = new OracleDataAdapter(cmd);
            DataTable         dt          = new DataTable();
            await Task.FromResult(DataAdapter.Fill(dt));

            //dt: sender_user_id, private_letter_id, content, timestamp
            MessageController.MessageForShow[] receivedTwitters = new MessageController.MessageForShow[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; ++i)
            {
                int message_id = int.Parse(dt.Rows[i][0].ToString());
                receivedTwitters[i] = await MessageController.InnerQuery(message_id);
            }
            return(receivedTwitters);
        }
        public async Task <IActionResult> Query([Required][FromBody] Range range)
        {
            //TODO 需要身份验证
            //查找At自己的在range范围内的message_id
            //按照时间排序
            //返回包含这些id的Json对象
            int my_user_id = -1;

            if (HttpContext.User.Identity.IsAuthenticated)
            {
                my_user_id = int.Parse(HttpContext.User.Claims.ElementAt(0).Value);
            }
            else
            {
                //进入到这部分意味着用户登录态已经失效,需要返回给客户端信息,即需要登录。
                RestfulResult.RestfulData rr = new RestfulResult.RestfulData();
                rr.Code    = 200;
                rr.Message = "Need Authentication";
                return(new JsonResult(rr));
            }

            return(await Wrapper.wrap(async (OracleConnection conn) =>
            {
                //FUNC_QUERY_MESSAGE_AT_USER(in_user_id in INTEGER, startFrom in INTEGER, limitation in INTEGER, search_result out sys_refcursor)
                //return INTEGER
                string procudureName = "FUNC_QUERY_MESSAGE_AT_USER";
                OracleCommand cmd = new OracleCommand(procudureName, conn);
                cmd.CommandType = CommandType.StoredProcedure;

                //Add return value
                OracleParameter p1 = new OracleParameter();
                p1 = cmd.Parameters.Add("state", OracleDbType.Int32);
                p1.Direction = ParameterDirection.ReturnValue;
                //Add input parameter follower_id
                OracleParameter p2 = new OracleParameter();
                p2 = cmd.Parameters.Add("in_user_id", OracleDbType.Int32);
                p2.Direction = ParameterDirection.Input;
                p2.Value = my_user_id;
                OracleParameter p3 = new OracleParameter();
                //Add input parameter be_followed_id
                p3 = cmd.Parameters.Add("startFrom", OracleDbType.Int32);
                p3.Value = range.startFrom;
                p3.Direction = ParameterDirection.Input;
                OracleParameter p4 = new OracleParameter();
                //Add input parameter be_followed_id
                p4 = cmd.Parameters.Add("limitation", OracleDbType.Int32);
                p4.Value = range.limitation;
                p4.Direction = ParameterDirection.Input;
                //Add input parameter search_result
                OracleParameter p5 = new OracleParameter();
                p5 = cmd.Parameters.Add("search_result", OracleDbType.RefCursor);
                p5.Direction = ParameterDirection.Output;

                OracleDataAdapter DataAdapter = new OracleDataAdapter(cmd);
                DataTable dt = new DataTable();
                await Task.FromResult(DataAdapter.Fill(dt));

                //dt: message_id
                MessageController.MessageForShow[] messages = new MessageController.MessageForShow[dt.Rows.Count];
                for (int i = 0; i < dt.Rows.Count; ++i)
                {
                    int message_id = int.Parse(dt.Rows[i][0].ToString());
                    messages[i] = await MessageController.InnerQuery(message_id);
                }


                RestfulResult.RestfulArray <MessageController.MessageForShow> rr = new RestfulResult.RestfulArray <MessageController.MessageForShow>();
                rr.Code = 200;
                rr.Message = "success";
                rr.Data = messages;
                return new JsonResult(rr);
            }));
        }
        public async Task <IActionResult> Query([Required] int user_id, [Required][FromBody] Range range)
        {
            //TODO 需要验证登录态
            //需要range作为参数
            //从数据库取出message_id们 加油


            return(await Wrapper.wrap(async (OracleConnection conn) =>
            {
                //FUNC_QUERY_COLLECTIONS_OF_MINE(userid in INTEGER, startFrom in INTEGER, limitation in INTEGER, search_result out sys_refcursor)
                //return INTEGER
                string procudureName = "FUNC_QUERY_COLLECTIONS_OF_MINE";
                OracleCommand cmd = new OracleCommand(procudureName, conn);
                cmd.CommandType = CommandType.StoredProcedure;

                //Add return value
                OracleParameter p1 = new OracleParameter();
                p1 = cmd.Parameters.Add("state", OracleDbType.Int32);
                p1.Direction = ParameterDirection.ReturnValue;
                //Add input parameter user_id
                OracleParameter p2 = new OracleParameter();
                p2 = cmd.Parameters.Add("userid", OracleDbType.Int32);
                p2.Direction = ParameterDirection.Input;
                p2.Value = user_id;
                OracleParameter p3 = new OracleParameter();
                //Add input parameter startFrom
                p3 = cmd.Parameters.Add("startFrom", OracleDbType.Int32);
                p3.Value = range.startFrom;
                p3.Direction = ParameterDirection.Input;
                OracleParameter p4 = new OracleParameter();
                //Add input parameter limitation
                p4 = cmd.Parameters.Add("limitation", OracleDbType.Int32);
                p4.Value = range.limitation;
                p4.Direction = ParameterDirection.Input;
                //Add output parameter result
                OracleParameter p5 = new OracleParameter();
                p5 = cmd.Parameters.Add("search_result", OracleDbType.RefCursor);
                p5.Direction = ParameterDirection.Output;

                OracleDataAdapter DataAdapter = new OracleDataAdapter(cmd);
                DataTable dt = new DataTable();
                await Task.FromResult(DataAdapter.Fill(dt));

                //dt: message_id
                int[] message_ids = new int[dt.Rows.Count];
                for (int i = 0; i < dt.Rows.Count; ++i)
                {
                    message_ids[i] = int.Parse(dt.Rows[i][0].ToString());
                }

                MessageController.MessageForShow[] messages = new MessageController.MessageForShow[dt.Rows.Count];
                for (int i = 0; i < dt.Rows.Count; ++i)
                {
                    messages[i] = await MessageController.InnerQuery(message_ids[i]);
                }

                //RestfulResult.RestfulArray<int> rr = new RestfulResult.RestfulArray<int>();

                RestfulResult.RestfulArray <MessageController.MessageForShow> rr = new RestfulResult.RestfulArray <MessageController.MessageForShow>();
                rr.Code = 200;
                rr.Message = "success";
                rr.Data = messages;

                return new JsonResult(rr);
            }));
        }